From 2b2e1d4b9aa2ef18bc091cf54716e9b9b88f557e Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Fri, 9 Nov 2018 12:58:39 +0100 Subject: [PATCH 01/42] rewrite mongoose migration to avoid using recursion --- .../users/20181023_veteran_pet_ladder.js | 88 ++++++------------- 1 file changed, 28 insertions(+), 60 deletions(-) diff --git a/migrations/users/20181023_veteran_pet_ladder.js b/migrations/users/20181023_veteran_pet_ladder.js index cbe8044d53..265808d5aa 100644 --- a/migrations/users/20181023_veteran_pet_ladder.js +++ b/migrations/users/20181023_veteran_pet_ladder.js @@ -2,52 +2,10 @@ const MIGRATION_NAME = '20181023_veteran_pet_ladder'; import { model as User } from '../../website/server/models/user'; -function processUsers (lastId) { - let query = { - migration: {$ne: MIGRATION_NAME}, - 'flags.verifiedUsername': true, - }; - - const fields = { - 'items.pets': 1, - }; - - if (lastId) { - query._id = { - $gt: lastId, - }; - } - - return User.find(query) - .limit(250) - .sort({_id: 1}) - .select(fields) - .exec() - .then(updateUsers) - .catch((err) => { - console.log(err); - return exiting(1, `ERROR! ${err}`); - }); -} - const progressCount = 1000; let count = 0; -function updateUsers (users) { - if (!users || users.length === 0) { - console.warn('All appropriate users found and modified.'); - displayData(); - return; - } - - let userPromises = users.map(updateUser); - let lastUser = users[users.length - 1]; - - return Promise.all(userPromises) - .then(() => { - return processUsers(lastUser._id); - }); -} +const batchSize = 250; function updateUser (user) { count++; @@ -71,24 +29,34 @@ function updateUser (user) { return user.save(); } -function displayData () { - console.warn(`\n${count} users processed\n`); - return exiting(0); -} +module.exports = async function processUsers () { + let query = { + migration: {$ne: MIGRATION_NAME}, + 'flags.verifiedUsername': true, + }; -function exiting (code, msg) { - code = code || 0; // 0 = success - if (code && !msg) { - msg = 'ERROR!'; - } - if (msg) { - if (code) { - console.error(msg); + const fields = { + items: 1, + }; + + while (true) { // eslint-disable-line no-constant-condition + const users = await User // eslint-disable-line no-await-in-loop + .find(query) + .limit(batchSize) + .sort({_id: 1}) + .select(fields) + .exec(); + + if (users.length === 0) { + console.warn('All appropriate users found and modified.'); + console.warn(`\n${count} users processed\n`); + break; } else { - console.log(msg); + query._id = { + $gt: users[users.length - 1], + }; } - } - process.exit(code); -} -module.exports = processUsers; + await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop + } +}; From 39a35f44ef94f1a28b2adac90b55e308b3a746cf Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Fri, 9 Nov 2018 13:01:19 +0100 Subject: [PATCH 02/42] fixes --- migrations/users/20181023_veteran_pet_ladder.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/migrations/users/20181023_veteran_pet_ladder.js b/migrations/users/20181023_veteran_pet_ladder.js index 265808d5aa..4f2013df5d 100644 --- a/migrations/users/20181023_veteran_pet_ladder.js +++ b/migrations/users/20181023_veteran_pet_ladder.js @@ -5,9 +5,7 @@ import { model as User } from '../../website/server/models/user'; const progressCount = 1000; let count = 0; -const batchSize = 250; - -function updateUser (user) { +async function updateUser (user) { count++; user.migration = MIGRATION_NAME; @@ -26,7 +24,7 @@ function updateUser (user) { if (count % progressCount === 0) console.warn(`${count} ${user._id}`); - return user.save(); + return await user.save(); } module.exports = async function processUsers () { @@ -42,7 +40,7 @@ module.exports = async function processUsers () { while (true) { // eslint-disable-line no-constant-condition const users = await User // eslint-disable-line no-await-in-loop .find(query) - .limit(batchSize) + .limit(250) .sort({_id: 1}) .select(fields) .exec(); From 808885425f4f908fb712d59b604d4273741d4844 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Fri, 9 Nov 2018 13:04:25 +0100 Subject: [PATCH 03/42] select more fields --- migrations/users/20181023_veteran_pet_ladder.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/migrations/users/20181023_veteran_pet_ladder.js b/migrations/users/20181023_veteran_pet_ladder.js index 4f2013df5d..c70cd028c7 100644 --- a/migrations/users/20181023_veteran_pet_ladder.js +++ b/migrations/users/20181023_veteran_pet_ladder.js @@ -34,7 +34,10 @@ module.exports = async function processUsers () { }; const fields = { + _id: 1, items: 1, + migration: 1, + flags: 1, }; while (true) { // eslint-disable-line no-constant-condition From ce03f837c78929a81b0a3b958eb64759581d887d Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Fri, 9 Nov 2018 13:10:55 +0100 Subject: [PATCH 04/42] use lean and .update --- migrations/users/20181023_veteran_pet_ladder.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/migrations/users/20181023_veteran_pet_ladder.js b/migrations/users/20181023_veteran_pet_ladder.js index c70cd028c7..4f33820bba 100644 --- a/migrations/users/20181023_veteran_pet_ladder.js +++ b/migrations/users/20181023_veteran_pet_ladder.js @@ -8,23 +8,25 @@ let count = 0; async function updateUser (user) { count++; - user.migration = MIGRATION_NAME; + const set = {}; + + set.migration = MIGRATION_NAME; if (user.items.pets['Bear-Veteran']) { - user.items.pets['Fox-Veteran'] = 5; + set['items.pets.Fox-Veteran'] = 5; } else if (user.items.pets['Lion-Veteran']) { - user.items.pets['Bear-Veteran'] = 5; + set['items.pets.Bear-Veteran'] = 5; } else if (user.items.pets['Tiger-Veteran']) { - user.items.pets['Lion-Veteran'] = 5; + set['items.pets.Lion-Veteran'] = 5; } else if (user.items.pets['Wolf-Veteran']) { - user.items.pets['Tiger-Veteran'] = 5; + set['items.pets.Tiger-Veteran'] = 5; } else { - user.items.pets['Wolf-Veteran'] = 5; + set['items.pets.Wolf-Veteran'] = 5; } if (count % progressCount === 0) console.warn(`${count} ${user._id}`); - return await user.save(); + return await User.update({_id: user._id}, {$set: set}).exec(); } module.exports = async function processUsers () { @@ -46,6 +48,7 @@ module.exports = async function processUsers () { .limit(250) .sort({_id: 1}) .select(fields) + .lean() .exec(); if (users.length === 0) { From 1a7461a8a21b013748af76df25ad705b2ba8f332 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Wed, 14 Nov 2018 10:40:27 +0100 Subject: [PATCH 05/42] move the update username route to v3 (#10836) --- .../auth/PUT-user_update_username.test.js | 140 +++++++++-- .../auth/PUT-user_update_username.test.js | 224 ------------------ website/server/controllers/api-v3/auth.js | 49 ++-- website/server/controllers/api-v4/auth.js | 75 ------ website/server/middlewares/appRoutes.js | 1 - 5 files changed, 157 insertions(+), 332 deletions(-) delete mode 100644 test/api/v4/user/auth/PUT-user_update_username.test.js diff --git a/test/api/v3/integration/user/auth/PUT-user_update_username.test.js b/test/api/v3/integration/user/auth/PUT-user_update_username.test.js index 7fd8df6192..987f7bd556 100644 --- a/test/api/v3/integration/user/auth/PUT-user_update_username.test.js +++ b/test/api/v3/integration/user/auth/PUT-user_update_username.test.js @@ -12,14 +12,14 @@ const ENDPOINT = '/user/auth/update-username'; describe('PUT /user/auth/update-username', async () => { let user; - let newUsername = 'new-username'; - let password = 'password'; // from habitrpg/test/helpers/api-integration/v3/object-generators.js + let password = 'password'; // from habitrpg/test/helpers/api-integration/v4/object-generators.js beforeEach(async () => { user = await generateUser(); }); - it('successfully changes username', async () => { + it('successfully changes username with password', async () => { + let newUsername = 'new-username'; let response = await user.put(ENDPOINT, { username: newUsername, password, @@ -29,6 +29,38 @@ describe('PUT /user/auth/update-username', async () => { expect(user.auth.local.username).to.eql(newUsername); }); + it('successfully changes username without password', async () => { + let newUsername = 'new-username-nopw'; + let response = await user.put(ENDPOINT, { + username: newUsername, + }); + expect(response).to.eql({ username: newUsername }); + await user.sync(); + expect(user.auth.local.username).to.eql(newUsername); + }); + + it('successfully changes username containing number and underscore', async () => { + let newUsername = 'new_username9'; + let response = await user.put(ENDPOINT, { + username: newUsername, + }); + expect(response).to.eql({ username: newUsername }); + await user.sync(); + expect(user.auth.local.username).to.eql(newUsername); + }); + + it('sets verifiedUsername when changing username', async () => { + user.flags.verifiedUsername = false; + await user.sync(); + let newUsername = 'new-username-verify'; + let response = await user.put(ENDPOINT, { + username: newUsername, + }); + expect(response).to.eql({ username: newUsername }); + await user.sync(); + expect(user.flags.verifiedUsername).to.eql(true); + }); + it('converts user with SHA1 encrypted password to bcrypt encryption', async () => { let myNewUsername = 'my-new-username'; let textPassword = 'mySecretPassword'; @@ -80,6 +112,7 @@ describe('PUT /user/auth/update-username', async () => { }); it('errors if password is wrong', async () => { + let newUsername = 'new-username'; await expect(user.put(ENDPOINT, { username: newUsername, password: 'wrong-password', @@ -90,19 +123,6 @@ describe('PUT /user/auth/update-username', async () => { }); }); - it('prevents social-only user from changing username', async () => { - let socialUser = await generateUser({ 'auth.local': { ok: true } }); - - await expect(socialUser.put(ENDPOINT, { - username: newUsername, - password, - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: t('userHasNoLocalRegistration'), - }); - }); - it('errors if new username is not provided', async () => { await expect(user.put(ENDPOINT, { password, @@ -112,5 +132,93 @@ describe('PUT /user/auth/update-username', async () => { message: t('invalidReqParams'), }); }); + + it('errors if new username is a slur', async () => { + await expect(user.put(ENDPOINT, { + username: 'TESTPLACEHOLDERSLURWORDHERE', + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: [t('usernameIssueLength'), t('usernameIssueSlur')].join(' '), + }); + }); + + it('errors if new username contains a slur', async () => { + await expect(user.put(ENDPOINT, { + username: 'TESTPLACEHOLDERSLURWORDHERE_otherword', + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: [t('usernameIssueLength'), t('usernameIssueSlur')].join(' '), + }); + await expect(user.put(ENDPOINT, { + username: 'something_TESTPLACEHOLDERSLURWORDHERE', + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: [t('usernameIssueLength'), t('usernameIssueSlur')].join(' '), + }); + await expect(user.put(ENDPOINT, { + username: 'somethingTESTPLACEHOLDERSLURWORDHEREotherword', + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: [t('usernameIssueLength'), t('usernameIssueSlur')].join(' '), + }); + }); + + it('errors if new username is not allowed', async () => { + await expect(user.put(ENDPOINT, { + username: 'support', + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('usernameIssueForbidden'), + }); + }); + + it('errors if new username is not allowed regardless of casing', async () => { + await expect(user.put(ENDPOINT, { + username: 'SUppORT', + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('usernameIssueForbidden'), + }); + }); + + it('errors if username has incorrect length', async () => { + await expect(user.put(ENDPOINT, { + username: 'thisisaverylongusernameover20characters', + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('usernameIssueLength'), + }); + }); + + it('errors if new username contains invalid characters', async () => { + await expect(user.put(ENDPOINT, { + username: 'Eichhörnchen', + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('usernameIssueInvalidCharacters'), + }); + await expect(user.put(ENDPOINT, { + username: 'test.name', + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('usernameIssueInvalidCharacters'), + }); + await expect(user.put(ENDPOINT, { + username: '🤬', + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('usernameIssueInvalidCharacters'), + }); + }); }); }); diff --git a/test/api/v4/user/auth/PUT-user_update_username.test.js b/test/api/v4/user/auth/PUT-user_update_username.test.js deleted file mode 100644 index 26a622cf04..0000000000 --- a/test/api/v4/user/auth/PUT-user_update_username.test.js +++ /dev/null @@ -1,224 +0,0 @@ -import { - generateUser, - translate as t, -} from '../../../../helpers/api-integration/v4'; -import { - bcryptCompare, - sha1MakeSalt, - sha1Encrypt as sha1EncryptPassword, -} from '../../../../../website/server/libs/password'; - -const ENDPOINT = '/user/auth/update-username'; - -describe('PUT /user/auth/update-username', async () => { - let user; - let password = 'password'; // from habitrpg/test/helpers/api-integration/v4/object-generators.js - - beforeEach(async () => { - user = await generateUser(); - }); - - it('successfully changes username with password', async () => { - let newUsername = 'new-username'; - let response = await user.put(ENDPOINT, { - username: newUsername, - password, - }); - expect(response).to.eql({ username: newUsername }); - await user.sync(); - expect(user.auth.local.username).to.eql(newUsername); - }); - - it('successfully changes username without password', async () => { - let newUsername = 'new-username-nopw'; - let response = await user.put(ENDPOINT, { - username: newUsername, - }); - expect(response).to.eql({ username: newUsername }); - await user.sync(); - expect(user.auth.local.username).to.eql(newUsername); - }); - - it('successfully changes username containing number and underscore', async () => { - let newUsername = 'new_username9'; - let response = await user.put(ENDPOINT, { - username: newUsername, - }); - expect(response).to.eql({ username: newUsername }); - await user.sync(); - expect(user.auth.local.username).to.eql(newUsername); - }); - - it('sets verifiedUsername when changing username', async () => { - user.flags.verifiedUsername = false; - await user.sync(); - let newUsername = 'new-username-verify'; - let response = await user.put(ENDPOINT, { - username: newUsername, - }); - expect(response).to.eql({ username: newUsername }); - await user.sync(); - expect(user.flags.verifiedUsername).to.eql(true); - }); - - it('converts user with SHA1 encrypted password to bcrypt encryption', async () => { - let myNewUsername = 'my-new-username'; - let textPassword = 'mySecretPassword'; - let salt = sha1MakeSalt(); - let sha1HashedPassword = sha1EncryptPassword(textPassword, salt); - - await user.update({ - 'auth.local.hashed_password': sha1HashedPassword, - 'auth.local.passwordHashMethod': 'sha1', - 'auth.local.salt': salt, - }); - - await user.sync(); - expect(user.auth.local.passwordHashMethod).to.equal('sha1'); - expect(user.auth.local.salt).to.equal(salt); - expect(user.auth.local.hashed_password).to.equal(sha1HashedPassword); - - // update email - let response = await user.put(ENDPOINT, { - username: myNewUsername, - password: textPassword, - }); - expect(response).to.eql({ username: myNewUsername }); - - await user.sync(); - - expect(user.auth.local.username).to.eql(myNewUsername); - expect(user.auth.local.passwordHashMethod).to.equal('bcrypt'); - expect(user.auth.local.salt).to.be.undefined; - expect(user.auth.local.hashed_password).not.to.equal(sha1HashedPassword); - - let isValidPassword = await bcryptCompare(textPassword, user.auth.local.hashed_password); - expect(isValidPassword).to.equal(true); - }); - - context('errors', async () => { - it('prevents username update if new username is already taken', async () => { - let existingUsername = 'existing-username'; - await generateUser({'auth.local.username': existingUsername, 'auth.local.lowerCaseUsername': existingUsername }); - - await expect(user.put(ENDPOINT, { - username: existingUsername, - password, - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: t('usernameTaken'), - }); - }); - - it('errors if password is wrong', async () => { - let newUsername = 'new-username'; - await expect(user.put(ENDPOINT, { - username: newUsername, - password: 'wrong-password', - })).to.eventually.be.rejected.and.eql({ - code: 401, - error: 'NotAuthorized', - message: t('wrongPassword'), - }); - }); - - it('errors if new username is not provided', async () => { - await expect(user.put(ENDPOINT, { - password, - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: t('invalidReqParams'), - }); - }); - - it('errors if new username is a slur', async () => { - await expect(user.put(ENDPOINT, { - username: 'TESTPLACEHOLDERSLURWORDHERE', - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: [t('usernameIssueLength'), t('usernameIssueSlur')].join(' '), - }); - }); - - it('errors if new username contains a slur', async () => { - await expect(user.put(ENDPOINT, { - username: 'TESTPLACEHOLDERSLURWORDHERE_otherword', - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: [t('usernameIssueLength'), t('usernameIssueSlur')].join(' '), - }); - await expect(user.put(ENDPOINT, { - username: 'something_TESTPLACEHOLDERSLURWORDHERE', - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: [t('usernameIssueLength'), t('usernameIssueSlur')].join(' '), - }); - await expect(user.put(ENDPOINT, { - username: 'somethingTESTPLACEHOLDERSLURWORDHEREotherword', - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: [t('usernameIssueLength'), t('usernameIssueSlur')].join(' '), - }); - }); - - it('errors if new username is not allowed', async () => { - await expect(user.put(ENDPOINT, { - username: 'support', - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: t('usernameIssueForbidden'), - }); - }); - - it('errors if new username is not allowed regardless of casing', async () => { - await expect(user.put(ENDPOINT, { - username: 'SUppORT', - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: t('usernameIssueForbidden'), - }); - }); - - it('errors if username has incorrect length', async () => { - await expect(user.put(ENDPOINT, { - username: 'thisisaverylongusernameover20characters', - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: t('usernameIssueLength'), - }); - }); - - it('errors if new username contains invalid characters', async () => { - await expect(user.put(ENDPOINT, { - username: 'Eichhörnchen', - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: t('usernameIssueInvalidCharacters'), - }); - await expect(user.put(ENDPOINT, { - username: 'test.name', - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: t('usernameIssueInvalidCharacters'), - }); - await expect(user.put(ENDPOINT, { - username: '🤬', - })).to.eventually.be.rejected.and.eql({ - code: 400, - error: 'BadRequest', - message: t('usernameIssueInvalidCharacters'), - }); - }); - }); -}); diff --git a/website/server/controllers/api-v3/auth.js b/website/server/controllers/api-v3/auth.js index a7671d3f1c..15d9fa8ecd 100644 --- a/website/server/controllers/api-v3/auth.js +++ b/website/server/controllers/api-v3/auth.js @@ -17,10 +17,10 @@ import { encrypt } from '../../libs/encryption'; import { loginRes, hasBackupAuth, - hasLocalAuth, loginSocial, registerLocal, } from '../../libs/auth'; +import {verifyUsername} from '../../libs/user/validation'; const BASE_URL = nconf.get('BASE_URL'); const TECH_ASSISTANCE_EMAIL = nconf.get('EMAILS:TECH_ASSISTANCE_EMAIL'); @@ -144,7 +144,6 @@ api.loginSocial = { * @apiName UpdateUsername * @apiGroup User * - * @apiParam (Body) {String} password The current user password * @apiParam (Body) {String} username The new username * @apiSuccess {String} data.username The new username @@ -154,37 +153,55 @@ api.updateUsername = { middlewares: [authWithHeaders()], url: '/user/auth/update-username', async handler (req, res) { - let user = res.locals.user; + const user = res.locals.user; req.checkBody({ - password: { - notEmpty: {errorMessage: res.t('missingPassword')}, - }, username: { notEmpty: {errorMessage: res.t('missingUsername')}, }, }); - let validationErrors = req.validationErrors(); + const validationErrors = req.validationErrors(); if (validationErrors) throw validationErrors; - if (!hasLocalAuth(user)) throw new BadRequest(res.t('userHasNoLocalRegistration')); + const newUsername = req.body.username; - let password = req.body.password; - let isValidPassword = await passwordUtils.compare(user, password); - if (!isValidPassword) throw new NotAuthorized(res.t('wrongPassword')); + const issues = verifyUsername(newUsername, res); + if (issues.length > 0) throw new BadRequest(issues.join(' ')); - let count = await User.count({ 'auth.local.lowerCaseUsername': req.body.username.toLowerCase() }); - if (count > 0) throw new BadRequest(res.t('usernameTaken')); + const password = req.body.password; + if (password !== undefined) { + let isValidPassword = await passwordUtils.compare(user, password); + if (!isValidPassword) throw new NotAuthorized(res.t('wrongPassword')); + } + + const existingUser = await User.findOne({ 'auth.local.lowerCaseUsername': newUsername.toLowerCase() }, {auth: 1}).exec(); + if (existingUser !== undefined && existingUser !== null && existingUser._id !== user._id) { + throw new BadRequest(res.t('usernameTaken')); + } // if password is using old sha1 encryption, change it - if (user.auth.local.passwordHashMethod === 'sha1') { + if (user.auth.local.passwordHashMethod === 'sha1' && password !== undefined) { await passwordUtils.convertToBcrypt(user, password); // user is saved a few lines below } // save username - user.auth.local.lowerCaseUsername = req.body.username.toLowerCase(); - user.auth.local.username = req.body.username; + user.auth.local.lowerCaseUsername = newUsername.toLowerCase(); + user.auth.local.username = newUsername; + if (!user.flags.verifiedUsername) { + user.flags.verifiedUsername = true; + if (user.items.pets['Bear-Veteran']) { + user.items.pets['Fox-Veteran'] = 5; + } else if (user.items.pets['Lion-Veteran']) { + user.items.pets['Bear-Veteran'] = 5; + } else if (user.items.pets['Tiger-Veteran']) { + user.items.pets['Lion-Veteran'] = 5; + } else if (user.items.pets['Wolf-Veteran']) { + user.items.pets['Tiger-Veteran'] = 5; + } else { + user.items.pets['Wolf-Veteran'] = 5; + } + } await user.save(); res.respond(200, { username: req.body.username }); diff --git a/website/server/controllers/api-v4/auth.js b/website/server/controllers/api-v4/auth.js index 5b8d8540ad..11ec5f6f3f 100644 --- a/website/server/controllers/api-v4/auth.js +++ b/website/server/controllers/api-v4/auth.js @@ -2,86 +2,11 @@ import { authWithHeaders, } from '../../middlewares/auth'; import * as authLib from '../../libs/auth'; -import { - NotAuthorized, - BadRequest, -} from '../../libs/errors'; -import * as passwordUtils from '../../libs/password'; import { model as User } from '../../models/user'; import {verifyUsername} from '../../libs/user/validation'; const api = {}; -/** - * @api {put} /api/v4/user/auth/update-username Update username - * @apiDescription Update the username of a local user - * @apiName UpdateUsername - * @apiGroup User - * - * @apiParam (Body) {String} username The new username - - * @apiSuccess {String} data.username The new username - **/ -api.updateUsername = { - method: 'PUT', - middlewares: [authWithHeaders()], - url: '/user/auth/update-username', - async handler (req, res) { - const user = res.locals.user; - - req.checkBody({ - username: { - notEmpty: {errorMessage: res.t('missingUsername')}, - }, - }); - - const validationErrors = req.validationErrors(); - if (validationErrors) throw validationErrors; - - const newUsername = req.body.username; - - const issues = verifyUsername(newUsername, res); - if (issues.length > 0) throw new BadRequest(issues.join(' ')); - - const password = req.body.password; - if (password !== undefined) { - let isValidPassword = await passwordUtils.compare(user, password); - if (!isValidPassword) throw new NotAuthorized(res.t('wrongPassword')); - } - - const existingUser = await User.findOne({ 'auth.local.lowerCaseUsername': newUsername.toLowerCase() }, {auth: 1}).exec(); - if (existingUser !== undefined && existingUser !== null && existingUser._id !== user._id) { - throw new BadRequest(res.t('usernameTaken')); - } - - // if password is using old sha1 encryption, change it - if (user.auth.local.passwordHashMethod === 'sha1' && password !== undefined) { - await passwordUtils.convertToBcrypt(user, password); // user is saved a few lines below - } - - // save username - user.auth.local.lowerCaseUsername = newUsername.toLowerCase(); - user.auth.local.username = newUsername; - if (!user.flags.verifiedUsername) { - user.flags.verifiedUsername = true; - if (user.items.pets['Bear-Veteran']) { - user.items.pets['Fox-Veteran'] = 5; - } else if (user.items.pets['Lion-Veteran']) { - user.items.pets['Bear-Veteran'] = 5; - } else if (user.items.pets['Tiger-Veteran']) { - user.items.pets['Lion-Veteran'] = 5; - } else if (user.items.pets['Wolf-Veteran']) { - user.items.pets['Tiger-Veteran'] = 5; - } else { - user.items.pets['Wolf-Veteran'] = 5; - } - } - await user.save(); - - res.respond(200, { username: req.body.username }); - }, -}; - api.verifyUsername = { method: 'POST', url: '/user/auth/verify-username', diff --git a/website/server/middlewares/appRoutes.js b/website/server/middlewares/appRoutes.js index 5fe0408a8f..5819c7231d 100644 --- a/website/server/middlewares/appRoutes.js +++ b/website/server/middlewares/appRoutes.js @@ -34,7 +34,6 @@ app.use('/api/v3', v3Router); // A list of v3 routes in the format METHOD-URL to skip const v4RouterOverrides = [ // 'GET-/status', Example to override the GET /status api call - 'PUT-/user/auth/update-username', 'POST-/user/auth/local/register', 'GET-/user', 'PUT-/user', From f635f178da0e3a8668053f86677c81fff34e7400 Mon Sep 17 00:00:00 2001 From: SabreCat Date: Wed, 14 Nov 2018 13:07:44 +0000 Subject: [PATCH 06/42] fix(tests): correct expects --- .../GET-challenges_challengeId.test.js | 40 +++++++ ...GET-challenges_challengeId_members.test.js | 34 +++++- .../GET-challenges_group_groupid.test.js | 112 ++++++++++++++++++ .../challenges/GET-challenges_user.test.js | 40 +++++++ .../POST-challenges_challengeId_join.test.js | 8 ++ .../PUT-challenges_challengeId.test.js | 8 ++ .../groups/GET-groups_groupId_invites.test.js | 12 +- .../groups/GET-groups_groupId_members.test.js | 16 ++- .../groups/POST-groups_invite.test.js | 4 +- .../members/GET-members_id.test.js | 2 +- 10 files changed, 262 insertions(+), 14 deletions(-) diff --git a/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js b/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js index 6a9cd68429..6fd12c110b 100644 --- a/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js @@ -47,6 +47,14 @@ describe('GET /challenges/:challengeId', () => { _id: groupLeader._id, id: groupLeader._id, profile: {name: groupLeader.profile.name}, + auth: { + local: { + username: groupLeader.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); expect(chal.group).to.eql({ _id: group._id, @@ -105,6 +113,14 @@ describe('GET /challenges/:challengeId', () => { _id: challengeLeader._id, id: challengeLeader._id, profile: {name: challengeLeader.profile.name}, + auth: { + local: { + username: challengeLeader.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); expect(chal.group).to.eql({ _id: group._id, @@ -131,6 +147,14 @@ describe('GET /challenges/:challengeId', () => { _id: challengeLeader._id, id: challengeLeader._id, profile: {name: challengeLeader.profile.name}, + auth: { + local: { + username: challengeLeader.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); }); @@ -179,6 +203,14 @@ describe('GET /challenges/:challengeId', () => { _id: challengeLeader._id, id: challengeLeader._id, profile: {name: challengeLeader.profile.name}, + auth: { + local: { + username: challengeLeader.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); expect(chal.group).to.eql({ _id: group._id, @@ -205,6 +237,14 @@ describe('GET /challenges/:challengeId', () => { _id: challengeLeader._id, id: challengeLeader._id, profile: {name: challengeLeader.profile.name}, + auth: { + local: { + username: challengeLeader.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); }); diff --git a/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js b/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js index 2b0e006d38..2cc7aab5a3 100644 --- a/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js @@ -60,6 +60,14 @@ describe('GET /challenges/:challengeId/members', () => { _id: groupLeader._id, id: groupLeader._id, profile: {name: groupLeader.profile.name}, + auth: { + local: { + username: groupLeader.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); @@ -73,8 +81,16 @@ describe('GET /challenges/:challengeId/members', () => { _id: leader._id, id: leader._id, profile: {name: leader.profile.name}, + auth: { + local: { + username: leader.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); - expect(res[0]).to.have.all.keys(['_id', 'id', 'profile']); + expect(res[0]).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']); expect(res[0].profile).to.have.all.keys(['name']); }); @@ -88,8 +104,16 @@ describe('GET /challenges/:challengeId/members', () => { _id: anotherUser._id, id: anotherUser._id, profile: {name: anotherUser.profile.name}, + auth: { + local: { + username: anotherUser.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); - expect(res[0]).to.have.all.keys(['_id', 'id', 'profile']); + expect(res[0]).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']); expect(res[0].profile).to.have.all.keys(['name']); }); @@ -107,7 +131,7 @@ describe('GET /challenges/:challengeId/members', () => { let res = await user.get(`/challenges/${challenge._id}/members?includeAllMembers=not-true`); expect(res.length).to.equal(30); res.forEach(member => { - expect(member).to.have.all.keys(['_id', 'id', 'profile']); + expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']); expect(member.profile).to.have.all.keys(['name']); }); }); @@ -126,7 +150,7 @@ describe('GET /challenges/:challengeId/members', () => { let res = await user.get(`/challenges/${challenge._id}/members`); expect(res.length).to.equal(30); res.forEach(member => { - expect(member).to.have.all.keys(['_id', 'id', 'profile']); + expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']); expect(member.profile).to.have.all.keys(['name']); }); }); @@ -145,7 +169,7 @@ describe('GET /challenges/:challengeId/members', () => { let res = await user.get(`/challenges/${challenge._id}/members?includeAllMembers=true`); expect(res.length).to.equal(32); res.forEach(member => { - expect(member).to.have.all.keys(['_id', 'id', 'profile']); + expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']); expect(member.profile).to.have.all.keys(['name']); }); }); diff --git a/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js b/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js index 8ad7b76ed8..beb3b8a541 100644 --- a/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js @@ -39,6 +39,14 @@ describe('GET challenges/groups/:groupId', () => { _id: publicGuild.leader._id, id: publicGuild.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); let foundChallenge2 = _.find(challenges, { _id: challenge2._id }); expect(foundChallenge2).to.exist; @@ -46,6 +54,14 @@ describe('GET challenges/groups/:groupId', () => { _id: publicGuild.leader._id, id: publicGuild.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); @@ -58,6 +74,14 @@ describe('GET challenges/groups/:groupId', () => { _id: publicGuild.leader._id, id: publicGuild.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); let foundChallenge2 = _.find(challenges, { _id: challenge2._id }); expect(foundChallenge2).to.exist; @@ -65,6 +89,14 @@ describe('GET challenges/groups/:groupId', () => { _id: publicGuild.leader._id, id: publicGuild.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); @@ -125,6 +157,14 @@ describe('GET challenges/groups/:groupId', () => { _id: privateGuild.leader._id, id: privateGuild.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); let foundChallenge2 = _.find(challenges, { _id: challenge2._id }); expect(foundChallenge2).to.exist; @@ -132,6 +172,14 @@ describe('GET challenges/groups/:groupId', () => { _id: privateGuild.leader._id, id: privateGuild.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); }); @@ -235,6 +283,14 @@ describe('GET challenges/groups/:groupId', () => { _id: party.leader._id, id: party.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); let foundChallenge2 = _.find(challenges, { _id: challenge2._id }); expect(foundChallenge2).to.exist; @@ -242,6 +298,14 @@ describe('GET challenges/groups/:groupId', () => { _id: party.leader._id, id: party.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); @@ -254,6 +318,14 @@ describe('GET challenges/groups/:groupId', () => { _id: party.leader._id, id: party.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); let foundChallenge2 = _.find(challenges, { _id: challenge2._id }); expect(foundChallenge2).to.exist; @@ -261,6 +333,14 @@ describe('GET challenges/groups/:groupId', () => { _id: party.leader._id, id: party.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); }); @@ -288,6 +368,14 @@ describe('GET challenges/groups/:groupId', () => { _id: user._id, id: user._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); let foundChallenge2 = _.find(challenges, { _id: challenge2._id }); expect(foundChallenge2).to.exist; @@ -295,6 +383,14 @@ describe('GET challenges/groups/:groupId', () => { _id: user._id, id: user._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); @@ -307,6 +403,14 @@ describe('GET challenges/groups/:groupId', () => { _id: user._id, id: user._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); let foundChallenge2 = _.find(challenges, { _id: challenge2._id }); expect(foundChallenge2).to.exist; @@ -314,6 +418,14 @@ describe('GET challenges/groups/:groupId', () => { _id: user._id, id: user._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); }); diff --git a/test/api/v3/integration/challenges/GET-challenges_user.test.js b/test/api/v3/integration/challenges/GET-challenges_user.test.js index e1b1c32143..7f3cdbd55c 100644 --- a/test/api/v3/integration/challenges/GET-challenges_user.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_user.test.js @@ -40,6 +40,14 @@ describe('GET challenges/user', () => { _id: publicGuild.leader._id, id: publicGuild.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); expect(foundChallenge.group).to.eql({ _id: publicGuild._id, @@ -62,6 +70,14 @@ describe('GET challenges/user', () => { _id: publicGuild.leader._id, id: publicGuild.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); expect(foundChallenge1.group).to.eql({ _id: publicGuild._id, @@ -79,6 +95,14 @@ describe('GET challenges/user', () => { _id: publicGuild.leader._id, id: publicGuild.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); expect(foundChallenge2.group).to.eql({ _id: publicGuild._id, @@ -101,6 +125,14 @@ describe('GET challenges/user', () => { _id: publicGuild.leader._id, id: publicGuild.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); expect(foundChallenge1.group).to.eql({ _id: publicGuild._id, @@ -118,6 +150,14 @@ describe('GET challenges/user', () => { _id: publicGuild.leader._id, id: publicGuild.leader._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); expect(foundChallenge2.group).to.eql({ _id: publicGuild._id, diff --git a/test/api/v3/integration/challenges/POST-challenges_challengeId_join.test.js b/test/api/v3/integration/challenges/POST-challenges_challengeId_join.test.js index 1ca9a434c3..188bde9f23 100644 --- a/test/api/v3/integration/challenges/POST-challenges_challengeId_join.test.js +++ b/test/api/v3/integration/challenges/POST-challenges_challengeId_join.test.js @@ -79,6 +79,14 @@ describe('POST /challenges/:challengeId/join', () => { _id: groupLeader._id, id: groupLeader._id, profile: {name: groupLeader.profile.name}, + auth: { + local: { + username: groupLeader.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); expect(res.name).to.equal(challenge.name); }); diff --git a/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js b/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js index fc3155c6e0..88a78697c2 100644 --- a/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js +++ b/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js @@ -79,6 +79,14 @@ describe('PUT /challenges/:challengeId', () => { _id: member._id, id: member._id, profile: {name: member.profile.name}, + auth: { + local: { + username: member.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); expect(res.name).to.equal('New Challenge Name'); expect(res.description).to.equal('New challenge description.'); diff --git a/test/api/v3/integration/groups/GET-groups_groupId_invites.test.js b/test/api/v3/integration/groups/GET-groups_groupId_invites.test.js index 06cbf4974a..00111d1ba8 100644 --- a/test/api/v3/integration/groups/GET-groups_groupId_invites.test.js +++ b/test/api/v3/integration/groups/GET-groups_groupId_invites.test.js @@ -50,6 +50,14 @@ describe('GET /groups/:groupId/invites', () => { _id: invited._id, id: invited._id, profile: {name: invited.profile.name}, + auth: { + local: { + username: invited.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); @@ -58,7 +66,7 @@ describe('GET /groups/:groupId/invites', () => { let invited = await generateUser(); await user.post(`/groups/${group._id}/invite`, {uuids: [invited._id]}); let res = await user.get('/groups/party/invites'); - expect(res[0]).to.have.all.keys(['_id', 'id', 'profile']); + expect(res[0]).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']); expect(res[0].profile).to.have.all.keys(['name']); }); @@ -76,7 +84,7 @@ describe('GET /groups/:groupId/invites', () => { let res = await leader.get(`/groups/${group._id}/invites`); expect(res.length).to.equal(30); res.forEach(member => { - expect(member).to.have.all.keys(['_id', 'id', 'profile']); + expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']); expect(member.profile).to.have.all.keys(['name']); }); }).timeout(10000); diff --git a/test/api/v3/integration/groups/GET-groups_groupId_members.test.js b/test/api/v3/integration/groups/GET-groups_groupId_members.test.js index cbbe45b546..71cfb0b4e1 100644 --- a/test/api/v3/integration/groups/GET-groups_groupId_members.test.js +++ b/test/api/v3/integration/groups/GET-groups_groupId_members.test.js @@ -56,13 +56,21 @@ describe('GET /groups/:groupId/members', () => { _id: user._id, id: user._id, profile: {name: user.profile.name}, + auth: { + local: { + username: user.auth.local.username, + } + }, + flags: { + verifiedUsername: true, + }, }); }); it('populates only some fields', async () => { await generateGroup(user, {type: 'party', name: generateUUID()}); let res = await user.get('/groups/party/members'); - expect(res[0]).to.have.all.keys(['_id', 'id', 'profile']); + expect(res[0]).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']); expect(res[0].profile).to.have.all.keys(['name']); }); @@ -74,7 +82,7 @@ describe('GET /groups/:groupId/members', () => { '_id', 'id', 'preferences', 'profile', 'stats', 'achievements', 'party', 'backer', 'contributor', 'auth', 'items', 'inbox', 'loginIncentives', 'flags', ]); - expect(Object.keys(memberRes.auth)).to.eql(['timestamps']); + expect(Object.keys(memberRes.auth)).to.eql(['local', 'timestamps']); expect(Object.keys(memberRes.preferences).sort()).to.eql([ 'size', 'hair', 'skin', 'shirt', 'chair', 'costume', 'sleep', 'background', 'tasks', 'disableClasses', @@ -95,7 +103,7 @@ describe('GET /groups/:groupId/members', () => { '_id', 'id', 'preferences', 'profile', 'stats', 'achievements', 'party', 'backer', 'contributor', 'auth', 'items', 'inbox', 'loginIncentives', 'flags', ]); - expect(Object.keys(memberRes.auth)).to.eql(['timestamps']); + expect(Object.keys(memberRes.auth)).to.eql(['local', 'timestamps']); expect(Object.keys(memberRes.preferences).sort()).to.eql([ 'size', 'hair', 'skin', 'shirt', 'chair', 'costume', 'sleep', 'background', 'tasks', 'disableClasses', @@ -120,7 +128,7 @@ describe('GET /groups/:groupId/members', () => { let res = await user.get('/groups/party/members'); expect(res.length).to.equal(30); res.forEach(member => { - expect(member).to.have.all.keys(['_id', 'id', 'profile']); + expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']); expect(member.profile).to.have.all.keys(['name']); }); }); diff --git a/test/api/v3/integration/groups/POST-groups_invite.test.js b/test/api/v3/integration/groups/POST-groups_invite.test.js index ef223de87a..56f8236752 100644 --- a/test/api/v3/integration/groups/POST-groups_invite.test.js +++ b/test/api/v3/integration/groups/POST-groups_invite.test.js @@ -160,7 +160,7 @@ describe('Post /groups/:groupId/invite', () => { .to.eventually.be.rejected.and.eql({ code: 400, error: 'BadRequest', - message: t('inviteMissingUuid'), + message: t('inviteMustNotBeEmpty'), }); }); @@ -295,7 +295,7 @@ describe('Post /groups/:groupId/invite', () => { .to.eventually.be.rejected.and.eql({ code: 400, error: 'BadRequest', - message: t('inviteMissingEmail'), + message: t('inviteMustNotBeEmpty'), }); }); diff --git a/test/api/v3/integration/members/GET-members_id.test.js b/test/api/v3/integration/members/GET-members_id.test.js index 1dca0284b9..f93ea28498 100644 --- a/test/api/v3/integration/members/GET-members_id.test.js +++ b/test/api/v3/integration/members/GET-members_id.test.js @@ -34,7 +34,7 @@ describe('GET /members/:memberId', () => { '_id', 'id', 'preferences', 'profile', 'stats', 'achievements', 'party', 'backer', 'contributor', 'auth', 'items', 'inbox', 'loginIncentives', 'flags', ]); - expect(Object.keys(memberRes.auth)).to.eql(['timestamps']); + expect(Object.keys(memberRes.auth)).to.eql(['local', 'timestamps']); expect(Object.keys(memberRes.preferences).sort()).to.eql([ 'size', 'hair', 'skin', 'shirt', 'chair', 'costume', 'sleep', 'background', 'tasks', 'disableClasses', From 64a3d08ce3bc92f63ec529705e83ab3221afbac4 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Wed, 14 Nov 2018 07:43:08 -0600 Subject: [PATCH 07/42] fix(tests): linting & more expects Also one more tweak for invite validation responsiveness --- .../GET-challenges_challengeId.test.js | 10 +++---- ...GET-challenges_challengeId_members.test.js | 6 ++-- ...enges_challengeId_members_memberId.test.js | 2 +- .../GET-challenges_group_groupid.test.js | 28 +++++++++---------- .../challenges/GET-challenges_user.test.js | 10 +++---- .../POST-challenges_challengeId_join.test.js | 2 +- .../PUT-challenges_challengeId.test.js | 2 +- .../groups/GET-groups_groupId_invites.test.js | 2 +- .../groups/GET-groups_groupId_members.test.js | 4 +-- .../client/components/groups/inviteModal.vue | 11 +++++--- 10 files changed, 40 insertions(+), 37 deletions(-) diff --git a/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js b/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js index 6fd12c110b..2f3e219592 100644 --- a/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js @@ -50,7 +50,7 @@ describe('GET /challenges/:challengeId', () => { auth: { local: { username: groupLeader.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -116,7 +116,7 @@ describe('GET /challenges/:challengeId', () => { auth: { local: { username: challengeLeader.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -150,7 +150,7 @@ describe('GET /challenges/:challengeId', () => { auth: { local: { username: challengeLeader.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -206,7 +206,7 @@ describe('GET /challenges/:challengeId', () => { auth: { local: { username: challengeLeader.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -240,7 +240,7 @@ describe('GET /challenges/:challengeId', () => { auth: { local: { username: challengeLeader.auth.local.username, - } + }, }, flags: { verifiedUsername: true, diff --git a/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js b/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js index 2cc7aab5a3..97ed8236fc 100644 --- a/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js @@ -63,7 +63,7 @@ describe('GET /challenges/:challengeId/members', () => { auth: { local: { username: groupLeader.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -84,7 +84,7 @@ describe('GET /challenges/:challengeId/members', () => { auth: { local: { username: leader.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -107,7 +107,7 @@ describe('GET /challenges/:challengeId/members', () => { auth: { local: { username: anotherUser.auth.local.username, - } + }, }, flags: { verifiedUsername: true, diff --git a/test/api/v3/integration/challenges/GET-challenges_challengeId_members_memberId.test.js b/test/api/v3/integration/challenges/GET-challenges_challengeId_members_memberId.test.js index 47a7adbf39..eef16de7e1 100644 --- a/test/api/v3/integration/challenges/GET-challenges_challengeId_members_memberId.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_challengeId_members_memberId.test.js @@ -81,7 +81,7 @@ describe('GET /challenges/:challengeId/members/:memberId', () => { await groupLeader.post(`/tasks/challenge/${challenge._id}`, [{type: 'habit', text: taskText}]); let memberProgress = await user.get(`/challenges/${challenge._id}/members/${groupLeader._id}`); - expect(memberProgress).to.have.all.keys(['_id', 'id', 'profile', 'tasks']); + expect(memberProgress).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile', 'tasks']); expect(memberProgress.profile).to.have.all.keys(['name']); expect(memberProgress.tasks.length).to.equal(1); }); diff --git a/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js b/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js index beb3b8a541..9fc903c925 100644 --- a/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js @@ -42,7 +42,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -57,7 +57,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -77,7 +77,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -92,7 +92,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -160,7 +160,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -175,7 +175,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -286,7 +286,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -301,7 +301,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -321,7 +321,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -336,7 +336,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -371,7 +371,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -386,7 +386,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -406,7 +406,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -421,7 +421,7 @@ describe('GET challenges/groups/:groupId', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, diff --git a/test/api/v3/integration/challenges/GET-challenges_user.test.js b/test/api/v3/integration/challenges/GET-challenges_user.test.js index 7f3cdbd55c..9aa06541de 100644 --- a/test/api/v3/integration/challenges/GET-challenges_user.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_user.test.js @@ -43,7 +43,7 @@ describe('GET challenges/user', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -73,7 +73,7 @@ describe('GET challenges/user', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -98,7 +98,7 @@ describe('GET challenges/user', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -128,7 +128,7 @@ describe('GET challenges/user', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -153,7 +153,7 @@ describe('GET challenges/user', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, diff --git a/test/api/v3/integration/challenges/POST-challenges_challengeId_join.test.js b/test/api/v3/integration/challenges/POST-challenges_challengeId_join.test.js index 188bde9f23..8385d63e36 100644 --- a/test/api/v3/integration/challenges/POST-challenges_challengeId_join.test.js +++ b/test/api/v3/integration/challenges/POST-challenges_challengeId_join.test.js @@ -82,7 +82,7 @@ describe('POST /challenges/:challengeId/join', () => { auth: { local: { username: groupLeader.auth.local.username, - } + }, }, flags: { verifiedUsername: true, diff --git a/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js b/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js index 88a78697c2..4e6f4dad7c 100644 --- a/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js +++ b/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js @@ -82,7 +82,7 @@ describe('PUT /challenges/:challengeId', () => { auth: { local: { username: member.auth.local.username, - } + }, }, flags: { verifiedUsername: true, diff --git a/test/api/v3/integration/groups/GET-groups_groupId_invites.test.js b/test/api/v3/integration/groups/GET-groups_groupId_invites.test.js index 00111d1ba8..832efe66e9 100644 --- a/test/api/v3/integration/groups/GET-groups_groupId_invites.test.js +++ b/test/api/v3/integration/groups/GET-groups_groupId_invites.test.js @@ -53,7 +53,7 @@ describe('GET /groups/:groupId/invites', () => { auth: { local: { username: invited.auth.local.username, - } + }, }, flags: { verifiedUsername: true, diff --git a/test/api/v3/integration/groups/GET-groups_groupId_members.test.js b/test/api/v3/integration/groups/GET-groups_groupId_members.test.js index 71cfb0b4e1..603b2f64b1 100644 --- a/test/api/v3/integration/groups/GET-groups_groupId_members.test.js +++ b/test/api/v3/integration/groups/GET-groups_groupId_members.test.js @@ -59,7 +59,7 @@ describe('GET /groups/:groupId/members', () => { auth: { local: { username: user.auth.local.username, - } + }, }, flags: { verifiedUsername: true, @@ -145,7 +145,7 @@ describe('GET /groups/:groupId/members', () => { let res = await user.get('/groups/party/members?includeAllMembers=true'); expect(res.length).to.equal(30); res.forEach(member => { - expect(member).to.have.all.keys(['_id', 'id', 'profile']); + expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']); expect(member.profile).to.have.all.keys(['name']); }); }); diff --git a/website/client/components/groups/inviteModal.vue b/website/client/components/groups/inviteModal.vue index 8b7b002a6d..a1e8a312eb 100644 --- a/website/client/components/groups/inviteModal.vue +++ b/website/client/components/groups/inviteModal.vue @@ -11,7 +11,8 @@ type='text', :placeholder='$t("emailOrUsernameInvite")', v-model='invite.text', - v-on:keyup='checkInviteList', + v-on:keyup='expandInviteList', + v-on:change='checkInviteList', :class='{"input-valid": invite.valid, "is-invalid input-invalid": invite.valid === false}', ) .input-error.text-center.mt-2(v-if="invite.error") {{ invite.error }} @@ -124,11 +125,10 @@ }, methods: { checkInviteList: debounce(function checkList () { - this.invites = filter(this.invites, (invite) => { - return invite.text.length > 0; + this.invites = filter(this.invites, (invite, index) => { + return invite.text.length > 0 || index === this.invites.length - 1; }); while (this.invites.length < 2) this.invites.push(clone(INVITE_DEFAULTS)); - if (this.invites[this.invites.length - 1].text.length > 0) this.invites.push(clone(INVITE_DEFAULTS)); forEach(this.invites, (value, index) => { if (value.text.length < 1 || isEmail(value.text)) { return this.fillErrors(index); @@ -148,6 +148,9 @@ } }); }, 250), + expandInviteList () { + if (this.invites[this.invites.length - 1].text.length > 0) this.invites.push(clone(INVITE_DEFAULTS)); + }, fillErrors (index, res) { if (!res || res.status === 200) { this.invites[index].error = null; From d406da4081353120afe71c9f9277e8c97c0116ab Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Wed, 14 Nov 2018 08:30:34 -0600 Subject: [PATCH 08/42] chore(news): Bailey --- website/server/controllers/api-v3/news.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/website/server/controllers/api-v3/news.js b/website/server/controllers/api-v3/news.js index c4bd1c8349..3882555ccb 100644 --- a/website/server/controllers/api-v3/news.js +++ b/website/server/controllers/api-v3/news.js @@ -3,7 +3,7 @@ import { authWithHeaders } from '../../middlewares/auth'; let api = {}; // @TODO export this const, cannot export it from here because only routes are exported from controllers -const LAST_ANNOUNCEMENT_TITLE = 'FEATURED WIKI: MAGE’S TOWER; UNIQUE USERNAMES COMING SOON!'; +const LAST_ANNOUNCEMENT_TITLE = 'UNIQUE USERNAMES ARE HERE!'; const worldDmg = { // @TODO bailey: false, }; @@ -30,18 +30,14 @@ api.getNews = {

${res.t('newStuff')}

-

11/8/2018 - ${LAST_ANNOUNCEMENT_TITLE}

+

11/14/2018 - ${LAST_ANNOUNCEMENT_TITLE}


-

Blog Post: The Mage's Tower

-

This month's featured Wiki article is about The Mage's Tower! We hope that it will help you as customize Habitica to fit your goals and needs. Be sure to check it out, and let us know what you think by reaching out on Twitter, Tumblr, and Facebook.

-
by shanaqui and the Wiki Wizards
-
-

Unique Usernames are Coming!

-

Hello Habiticans! Next week, we will complete the transition from login names to unique usernames. We're making this change so it’s easier to find and invite your friends to Parties, Guilds, and Challenges, mention people in chat, and so that we can introduce even more useful social features in the future.

-

You can check and confirm (or change) your current Username in Settings.

-

Once you’ve confirmed, you’ll receive a special veteran pet as a reward! If you’d like to learn more about this change, this Wiki page has more detailed information. Thanks again for being part of our community!

+

Hello Habiticans! We're excited to announce the launch of our unique username system! We've made this change so it’s easier to find and invite your friends to Parties, Guilds, and Challenges, mention people in chat, and more. In the future we hope to use this functionality to introduce even more useful features, such as the option to receive notifications if you are mentioned in chat.

+

You can check and change your current Username in Settings. If you've just confirmed, check your Stable to find the Veteran Pet you've been given as a reward!

+

If you’d like to learn more about this change, this Wiki page has more detailed information.

+

Thank you for being patient as we make these changes to improve Habitica!

by Beffymaroo, SabreCat, Apollo, Piyo, viirus, Paglias, and TheHollidayInn
From 89fdd8a8bb81ecbd07810c5457d8425568b78ca2 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Wed, 14 Nov 2018 14:39:23 +0000 Subject: [PATCH 09/42] chore(i18n): update locales --- website/common/locales/bg/character.json | 2 +- website/common/locales/bg/front.json | 12 +- website/common/locales/bg/generic.json | 1 + website/common/locales/bg/groups.json | 10 +- website/common/locales/bg/messages.json | 3 +- website/common/locales/bg/npc.json | 4 +- website/common/locales/bg/settings.json | 9 +- website/common/locales/bg/subscriber.json | 2 +- website/common/locales/cs/character.json | 2 +- website/common/locales/cs/front.json | 12 +- website/common/locales/cs/generic.json | 1 + website/common/locales/cs/groups.json | 10 +- website/common/locales/cs/messages.json | 3 +- website/common/locales/cs/npc.json | 4 +- website/common/locales/cs/settings.json | 5 +- website/common/locales/cs/subscriber.json | 2 +- website/common/locales/da/character.json | 2 +- website/common/locales/da/front.json | 12 +- website/common/locales/da/generic.json | 1 + website/common/locales/da/groups.json | 10 +- website/common/locales/da/messages.json | 3 +- website/common/locales/da/npc.json | 4 +- website/common/locales/da/settings.json | 5 +- website/common/locales/da/subscriber.json | 2 +- website/common/locales/de/character.json | 2 +- website/common/locales/de/front.json | 22 +- website/common/locales/de/gear.json | 334 +++++++++--------- website/common/locales/de/generic.json | 1 + website/common/locales/de/groups.json | 10 +- website/common/locales/de/limited.json | 2 +- website/common/locales/de/messages.json | 3 +- website/common/locales/de/npc.json | 4 +- website/common/locales/de/questscontent.json | 24 +- website/common/locales/de/settings.json | 5 +- website/common/locales/de/subscriber.json | 2 +- .../common/locales/en@pirate/character.json | 2 +- website/common/locales/en@pirate/front.json | 12 +- website/common/locales/en@pirate/generic.json | 1 + website/common/locales/en@pirate/groups.json | 10 +- .../common/locales/en@pirate/messages.json | 3 +- website/common/locales/en@pirate/npc.json | 4 +- .../common/locales/en@pirate/settings.json | 5 +- .../common/locales/en@pirate/subscriber.json | 2 +- website/common/locales/en_GB/character.json | 2 +- website/common/locales/en_GB/front.json | 12 +- website/common/locales/en_GB/generic.json | 1 + website/common/locales/en_GB/groups.json | 10 +- website/common/locales/en_GB/messages.json | 3 +- website/common/locales/en_GB/npc.json | 4 +- website/common/locales/en_GB/settings.json | 5 +- website/common/locales/en_GB/subscriber.json | 2 +- website/common/locales/es/character.json | 2 +- website/common/locales/es/front.json | 12 +- website/common/locales/es/generic.json | 1 + website/common/locales/es/groups.json | 10 +- website/common/locales/es/messages.json | 3 +- website/common/locales/es/npc.json | 4 +- website/common/locales/es/settings.json | 5 +- website/common/locales/es/subscriber.json | 2 +- .../common/locales/es_419/backgrounds.json | 28 +- website/common/locales/es_419/character.json | 2 +- website/common/locales/es_419/front.json | 12 +- website/common/locales/es_419/generic.json | 1 + website/common/locales/es_419/groups.json | 10 +- website/common/locales/es_419/messages.json | 3 +- website/common/locales/es_419/npc.json | 4 +- website/common/locales/es_419/settings.json | 5 +- website/common/locales/es_419/subscriber.json | 2 +- website/common/locales/fr/backgrounds.json | 6 +- website/common/locales/fr/character.json | 2 +- website/common/locales/fr/front.json | 12 +- website/common/locales/fr/gear.json | 2 +- website/common/locales/fr/generic.json | 1 + website/common/locales/fr/groups.json | 10 +- website/common/locales/fr/limited.json | 2 +- website/common/locales/fr/messages.json | 3 +- website/common/locales/fr/npc.json | 4 +- website/common/locales/fr/settings.json | 9 +- website/common/locales/fr/subscriber.json | 2 +- website/common/locales/fr/tasks.json | 4 +- website/common/locales/he/character.json | 2 +- website/common/locales/he/front.json | 12 +- website/common/locales/he/generic.json | 1 + website/common/locales/he/groups.json | 10 +- website/common/locales/he/messages.json | 3 +- website/common/locales/he/npc.json | 4 +- website/common/locales/he/settings.json | 5 +- website/common/locales/he/subscriber.json | 2 +- website/common/locales/hu/character.json | 2 +- website/common/locales/hu/front.json | 12 +- website/common/locales/hu/generic.json | 1 + website/common/locales/hu/groups.json | 10 +- website/common/locales/hu/messages.json | 3 +- website/common/locales/hu/npc.json | 4 +- website/common/locales/hu/settings.json | 5 +- website/common/locales/hu/subscriber.json | 2 +- website/common/locales/id/character.json | 2 +- website/common/locales/id/front.json | 12 +- website/common/locales/id/generic.json | 1 + website/common/locales/id/groups.json | 10 +- website/common/locales/id/messages.json | 3 +- website/common/locales/id/npc.json | 4 +- website/common/locales/id/settings.json | 5 +- website/common/locales/id/subscriber.json | 2 +- website/common/locales/it/character.json | 2 +- website/common/locales/it/front.json | 12 +- website/common/locales/it/gear.json | 40 +-- website/common/locales/it/generic.json | 1 + website/common/locales/it/groups.json | 10 +- website/common/locales/it/messages.json | 3 +- website/common/locales/it/npc.json | 4 +- website/common/locales/it/settings.json | 5 +- website/common/locales/it/subscriber.json | 2 +- website/common/locales/ja/character.json | 2 +- website/common/locales/ja/front.json | 12 +- website/common/locales/ja/generic.json | 1 + website/common/locales/ja/groups.json | 14 +- website/common/locales/ja/messages.json | 3 +- website/common/locales/ja/npc.json | 4 +- website/common/locales/ja/settings.json | 9 +- website/common/locales/ja/subscriber.json | 2 +- website/common/locales/nl/backgrounds.json | 10 +- website/common/locales/nl/character.json | 2 +- website/common/locales/nl/front.json | 12 +- website/common/locales/nl/gear.json | 2 +- website/common/locales/nl/generic.json | 1 + website/common/locales/nl/groups.json | 10 +- website/common/locales/nl/messages.json | 3 +- website/common/locales/nl/npc.json | 4 +- website/common/locales/nl/settings.json | 23 +- website/common/locales/nl/subscriber.json | 2 +- website/common/locales/pl/character.json | 2 +- website/common/locales/pl/front.json | 12 +- website/common/locales/pl/generic.json | 1 + website/common/locales/pl/groups.json | 10 +- website/common/locales/pl/messages.json | 3 +- website/common/locales/pl/npc.json | 4 +- website/common/locales/pl/settings.json | 5 +- website/common/locales/pl/subscriber.json | 2 +- website/common/locales/pt/character.json | 2 +- website/common/locales/pt/front.json | 12 +- website/common/locales/pt/generic.json | 1 + website/common/locales/pt/groups.json | 10 +- website/common/locales/pt/messages.json | 3 +- website/common/locales/pt/npc.json | 4 +- website/common/locales/pt/settings.json | 5 +- website/common/locales/pt/subscriber.json | 2 +- website/common/locales/pt_BR/character.json | 2 +- website/common/locales/pt_BR/front.json | 12 +- website/common/locales/pt_BR/generic.json | 1 + website/common/locales/pt_BR/groups.json | 10 +- website/common/locales/pt_BR/messages.json | 3 +- website/common/locales/pt_BR/npc.json | 4 +- website/common/locales/pt_BR/settings.json | 9 +- website/common/locales/pt_BR/subscriber.json | 2 +- website/common/locales/ro/character.json | 2 +- website/common/locales/ro/front.json | 12 +- website/common/locales/ro/generic.json | 1 + website/common/locales/ro/groups.json | 10 +- website/common/locales/ro/messages.json | 3 +- website/common/locales/ro/npc.json | 4 +- website/common/locales/ro/settings.json | 5 +- website/common/locales/ro/subscriber.json | 2 +- website/common/locales/ru/character.json | 2 +- website/common/locales/ru/content.json | 6 +- website/common/locales/ru/front.json | 12 +- website/common/locales/ru/gear.json | 2 +- website/common/locales/ru/generic.json | 1 + website/common/locales/ru/groups.json | 12 +- website/common/locales/ru/messages.json | 3 +- website/common/locales/ru/npc.json | 4 +- website/common/locales/ru/questscontent.json | 2 +- website/common/locales/ru/settings.json | 9 +- website/common/locales/ru/subscriber.json | 2 +- website/common/locales/sk/character.json | 2 +- website/common/locales/sk/front.json | 12 +- website/common/locales/sk/generic.json | 1 + website/common/locales/sk/groups.json | 10 +- website/common/locales/sk/limited.json | 38 +- website/common/locales/sk/messages.json | 3 +- website/common/locales/sk/npc.json | 4 +- website/common/locales/sk/settings.json | 5 +- website/common/locales/sk/subscriber.json | 2 +- website/common/locales/sr/character.json | 2 +- website/common/locales/sr/front.json | 12 +- website/common/locales/sr/generic.json | 1 + website/common/locales/sr/groups.json | 10 +- website/common/locales/sr/messages.json | 3 +- website/common/locales/sr/npc.json | 4 +- website/common/locales/sr/settings.json | 5 +- website/common/locales/sr/subscriber.json | 2 +- website/common/locales/sv/character.json | 2 +- website/common/locales/sv/front.json | 12 +- website/common/locales/sv/generic.json | 1 + website/common/locales/sv/groups.json | 10 +- website/common/locales/sv/messages.json | 3 +- website/common/locales/sv/npc.json | 4 +- website/common/locales/sv/settings.json | 5 +- website/common/locales/sv/subscriber.json | 2 +- website/common/locales/tr/character.json | 2 +- website/common/locales/tr/content.json | 6 +- website/common/locales/tr/front.json | 18 +- website/common/locales/tr/gear.json | 74 ++-- website/common/locales/tr/generic.json | 3 +- website/common/locales/tr/groups.json | 16 +- website/common/locales/tr/limited.json | 8 +- website/common/locales/tr/messages.json | 3 +- website/common/locales/tr/npc.json | 4 +- website/common/locales/tr/questscontent.json | 12 +- website/common/locales/tr/settings.json | 9 +- website/common/locales/tr/subscriber.json | 2 +- website/common/locales/uk/character.json | 2 +- website/common/locales/uk/front.json | 12 +- website/common/locales/uk/generic.json | 1 + website/common/locales/uk/groups.json | 10 +- website/common/locales/uk/messages.json | 3 +- website/common/locales/uk/npc.json | 4 +- website/common/locales/uk/settings.json | 5 +- website/common/locales/uk/subscriber.json | 2 +- website/common/locales/zh/character.json | 2 +- website/common/locales/zh/front.json | 12 +- website/common/locales/zh/generic.json | 1 + website/common/locales/zh/groups.json | 10 +- website/common/locales/zh/messages.json | 3 +- website/common/locales/zh/npc.json | 4 +- website/common/locales/zh/settings.json | 5 +- website/common/locales/zh/subscriber.json | 2 +- website/common/locales/zh_TW/character.json | 2 +- website/common/locales/zh_TW/front.json | 12 +- website/common/locales/zh_TW/generic.json | 1 + website/common/locales/zh_TW/groups.json | 10 +- website/common/locales/zh_TW/messages.json | 3 +- website/common/locales/zh_TW/npc.json | 4 +- website/common/locales/zh_TW/settings.json | 5 +- website/common/locales/zh_TW/subscriber.json | 2 +- 235 files changed, 931 insertions(+), 796 deletions(-) diff --git a/website/common/locales/bg/character.json b/website/common/locales/bg/character.json index a5d4503e91..98b7348bf2 100644 --- a/website/common/locales/bg/character.json +++ b/website/common/locales/bg/character.json @@ -7,7 +7,7 @@ "noPhoto": "Този хабитиканец не е добавил снимка.", "other": "Други", "fullName": "Пълно име", - "displayName": "Екранно име", + "displayName": "Display name", "changeDisplayName": "Промяна на екранното име", "newDisplayName": "Ново екранно име", "displayPhoto": "Снимка", diff --git a/website/common/locales/bg/front.json b/website/common/locales/bg/front.json index 789ccc2fec..5547d108b5 100644 --- a/website/common/locales/bg/front.json +++ b/website/common/locales/bg/front.json @@ -271,15 +271,9 @@ "emailTaken": "Тази е-поща вече се използва от съществуващ профил.", "newEmailRequired": "Липсва нов адрес на е-поща.", "usernameTime": "Време е да си създадете потребителско име!", - "usernameInfo": "Екранното Ви име не е променено, но старото Ви име за вписване вече ще бъде публичното Ви потребителско име. Това потребителско име ще се използва за покани, @споменавания в чата, и за изпращане на съобщения.

Ако искате да научите повече за тази промяна, посетете страницата за имената на играчите в уикито ни.", - "usernameTOSRequirements": "Потребителските имена трябва са съобразени с Условията за ползване и Обществените правила. Ако преди това не сте имали име за вписване, то потребителското Ви име е създадено автоматично.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Потребителското име е заето.", - "usernameWrongLength": "Потребителското име трябва да бъде с дължина между 1 и 20 знака.", - "displayNameWrongLength": "Екранното име трябва да бъде с дължина между 1 и 30 знака.", - "usernameBadCharacters": "Потребителското име може да съдържа само латинските букви от „a“ до „z“, числата от 0 до 9, тире и долна черта.", - "nameBadWords": "Имената не може да съдържат неприлични думи.", - "confirmUsername": "Потвърждаване на потребителското име", - "usernameConfirmed": "Потребителското име е патвърдено", "passwordConfirmationMatch": "Повторената парола не съвпада с първата.", "invalidLoginCredentials": "Грешно потребителско име и/или е-поща и/или парола.", "passwordResetPage": "Нулиране на паролата", @@ -334,7 +328,7 @@ "joinMany": "Над 2 000 000 хора се забавляват, докато подобряват живота си. Присъединете се към тях!", "joinToday": "Присъединете се в Хабитика днес", "signup": "Регистриране", - "getStarted": "Първи стъпки", + "getStarted": "Get Started!", "mobileApps": "Мобилни приложения", "learnMore": "Научете повече" } \ No newline at end of file diff --git a/website/common/locales/bg/generic.json b/website/common/locales/bg/generic.json index 5833da14fd..24359bbc45 100644 --- a/website/common/locales/bg/generic.json +++ b/website/common/locales/bg/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Нужен е потребителски идентификатор", "resetFilters": "Изчистване на всички филтри", "applyFilters": "Прилагане на филтрите", + "wantToWorkOn": "I want to work on:", "categories": "Категории", "habiticaOfficial": "Хабитика – официално", "animals": "Животни", diff --git a/website/common/locales/bg/groups.json b/website/common/locales/bg/groups.json index b7322eb818..5148320b03 100644 --- a/website/common/locales/bg/groups.json +++ b/website/common/locales/bg/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Поканете съществуващи потребители", "byColon": "От:", "inviteNewUsers": "Поканете нови потребители", - "sendInvitations": "Изпращане на поканите", + "sendInvitations": "Send Invites", "invitationsSent": "Поканите са изпратени!", "invitationSent": "Поканата е изпратена!", "invitedFriend": "Поканил приятел", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Не можете да премахнете себе си!", "groupMemberNotFound": "Потребителят не е намерен сред членовете на групата", "mustBeGroupMember": "Трябва да бъде член на групата.", - "canOnlyInviteEmailUuid": "Покани могат да бъдат изпращани само чрез UUID идентификатор или е-поща.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "В поканата липсва адрес на е-поща.", "inviteMissingUuid": "В поканата липсва потребителски идентификатор", "inviteMustNotBeEmpty": "Поканата не трябва да бъде празна.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "Потребителят „<%= username %>“ (идентификатор: <%= userId %>) вече има чакаща покана.", "userAlreadyInAParty": "Потребителят „<%= username %>“ (идентификатор: <%= userId %>) вече членува в група.", "userWithIDNotFound": "Не е намерен потребител с идентификатора „<%= userId %>“.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Потребителят няма местна регистрация (потребителско име, е-поща, парола).", "uuidsMustBeAnArray": "Поканите чрез потребителски идентификатор трябва да бъдат масив.", "emailsMustBeAnArray": "Поканите чрез е-поща трябва да бъдат масив.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Може да пратите най-много „<%= maxInvites %>“ покани наведнъж.", "partyExceedsMembersLimit": "Размерът на групата е ограничен до <%= maxMembersParty %> членове", "onlyCreatorOrAdminCanDeleteChat": "Нямате право да изтриете това съобщение!", @@ -361,6 +363,10 @@ "liked": "Харесано", "joinGuild": "Присъединяване към гилдията", "inviteToGuild": "Покана в гилдията", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Съобщение до водача на гилдията", "donateGems": "Даряване на диаманти", "updateGuild": "Обновяване на гилдията", diff --git a/website/common/locales/bg/messages.json b/website/common/locales/bg/messages.json index c6feccb9e2..1b10c77873 100644 --- a/website/common/locales/bg/messages.json +++ b/website/common/locales/bg/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Идентификаторите на известията са задължителни.", "unallocatedStatsPoints": "Имате <%= points %> неразпределени показателни точки", "beginningOfConversation": "Това е началото на разговора Ви с <%= userName %>. Запомнете да спазвате добрия тон, да уважавате другия и да следвате Обществените правила!", - "messageDeletedUser": "Съжаляваме, но този потребител е изтрил профила си." + "messageDeletedUser": "Съжаляваме, но този потребител е изтрил профила си.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/bg/npc.json b/website/common/locales/bg/npc.json index 6ad8e9db90..5f45e013f8 100644 --- a/website/common/locales/bg/npc.json +++ b/website/common/locales/bg/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Добре дошли в", "welcomeBack": "Добре дошли отново!", "justin": "Джъстин", - "justinIntroMessage1": "Здравейте! Не съм Ви виждал досега. Името ми е Джъстин и аз ще Ви помогна да се ориентирате в Хабитика.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "За начало ще трябва да си създадете герой.", "justinIntroMessage3": "Чудесно! А сега, върху какво искате да работите по време на пътешествието си?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Готово! Аз попълних някои задачи с оглед на интересите Ви, така че можете да започнете веднага. Щракнете върху задача, за да я редактирате, или добавете нови задачи според желанията си!", "prev": "Назад", "next": "Напред", diff --git a/website/common/locales/bg/settings.json b/website/common/locales/bg/settings.json index db7e0efc1e..a60f428ab8 100644 --- a/website/common/locales/bg/settings.json +++ b/website/common/locales/bg/settings.json @@ -125,7 +125,7 @@ "importantAnnouncements": "Напомняния да влезете, за да завършите задачите си и да получите награди", "weeklyRecaps": "Информация относно дейността на профила Ви през последната седмица. (Забележка: в момента това е изключено поради проблеми с производителността, но се надяваме да го включим отново скоро!)", "onboarding": "Насоки за настройка на Вашия профил в Хабитика.", - "majorUpdates": "Important announcements", + "majorUpdates": "Важни обявления", "questStarted": "Мисията Ви започна", "invitedQuest": "Покана за мисия", "kickedGroup": "Изритан от групата", @@ -157,7 +157,7 @@ "generate": "Създаване", "getCodes": "Получаване на кодове", "webhooks": "Уеб-куки", - "webhooksInfo": "Habitica provides webhooks so that when certain actions occur in your account, information can be sent to a script on another website. You can specify those scripts here. Be careful with this feature because specifying an incorrect URL can cause errors or slowness in Habitica. For more information, see the wiki's Webhooks page.", + "webhooksInfo": "Хабитика предоставя уеб-куки, чрез които може да се изпрати информация до скрипт на друг уеб сайт, когато с профила Ви се случат определени действия. Можете да посочите тези скриптове тук. Внимавайте с тази функционалност, тъй като ако посочите неправилен адрес, това може да предизвика грешки или забавяния в Хабитика. За повече информация вижте страницата в уикито относно уеб-куките.", "enabled": "Включено", "webhookURL": "Адрес на уеб-куката", "invalidUrl": "грешен адрес", @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Потребителското име може да съдържа само латинските букви от „a“ до „z“, числата от 0 до 9, тире и долна черта.", "currentUsername": "Текущо потребителско име:", "displaynameIssueLength": "Екранните имена трябва да бъдат с дължина между 1 и 30 знака.", - "displaynameIssueSlur": "Екранните имена не може да съдържат неприлични думи.", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Към настройките", "usernameVerifiedConfirmation": "Вашето потребителско име, <%= username %>, е потвърдено!", "usernameNotVerified": "Моля, потвърдете потребителското си име.", - "changeUsernameDisclaimer": "Скоро ще преобразуваме имената за вписване към уникални, публични потребителски имена. Тези потребителски имена ще бъдат използвани за покани, @споменавания в чата, и съобщения." + "changeUsernameDisclaimer": "Скоро ще преобразуваме имената за вписване към уникални, публични потребителски имена. Тези потребителски имена ще бъдат използвани за покани, @споменавания в чата, и съобщения.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/bg/subscriber.json b/website/common/locales/bg/subscriber.json index 586d2cfc2a..ef4c84b5f3 100644 --- a/website/common/locales/bg/subscriber.json +++ b/website/common/locales/bg/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Имате ли код от купон?", "subscriptionAlreadySubscribedLeadIn": "Благодарим Ви, че станахте абонат!", "subscriptionAlreadySubscribed1": "За да видите подробности за абонамента си или да го прекратите, подновите или промените, моля, щракнете върху Потребителската иконка и изберете Настройки > Абонамент.", - "purchaseAll": "Купуване на всичко", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Абонатите могат да купуват диаманти със злато на пазара! За по-лесен достъп можете също да закачите диаманта към колоната си с награди.", "gemsRemaining": "оставащи диаманта", "notEnoughGemsToBuy": "Не можете да закупите толкова диаманти" diff --git a/website/common/locales/cs/character.json b/website/common/locales/cs/character.json index 7148ca6f3b..49f7ef4a42 100644 --- a/website/common/locales/cs/character.json +++ b/website/common/locales/cs/character.json @@ -7,7 +7,7 @@ "noPhoto": "Tento Habiťan nepřidal fotku", "other": "Další", "fullName": "Celé jméno", - "displayName": "Zobrazené jméno", + "displayName": "Display name", "changeDisplayName": "Změnit zobrazované jméno", "newDisplayName": "Nové zobrazované jméno", "displayPhoto": "Fotografie", diff --git a/website/common/locales/cs/front.json b/website/common/locales/cs/front.json index 8a909dca36..80dd65c80f 100644 --- a/website/common/locales/cs/front.json +++ b/website/common/locales/cs/front.json @@ -271,15 +271,9 @@ "emailTaken": "E-mailová adresa je již použita.", "newEmailRequired": "Chybějící e-mailová adresa.", "usernameTime": "Je čas nastavit si uživatelské jméno!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Potvrdit uživatelské jméno", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "Hesla se neshodují.", "invalidLoginCredentials": "Špatné uživatelské jméno, e-mail nebo heslo.", "passwordResetPage": "Obnovit heslo", @@ -334,7 +328,7 @@ "joinMany": "Přidej se k 2,000,000 lidí, kteří se již baví při dosahování svých cílů!", "joinToday": "Vydej se do země Habitica ještě dnes", "signup": "Zaregistruj se", - "getStarted": "Začni", + "getStarted": "Get Started!", "mobileApps": "Mobilní aplikace", "learnMore": "Zjisti více" } \ No newline at end of file diff --git a/website/common/locales/cs/generic.json b/website/common/locales/cs/generic.json index 3326951b2a..f0659e18b1 100644 --- a/website/common/locales/cs/generic.json +++ b/website/common/locales/cs/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Je potřeba uživatelské ID", "resetFilters": "Vyčisti všechny fltry", "applyFilters": "Použij filtry", + "wantToWorkOn": "I want to work on:", "categories": "Kategorie", "habiticaOfficial": "Oficiální Habitica", "animals": "Zvířata", diff --git a/website/common/locales/cs/groups.json b/website/common/locales/cs/groups.json index cbed5630fe..7b032d07f8 100644 --- a/website/common/locales/cs/groups.json +++ b/website/common/locales/cs/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Pozvi existující uživatele", "byColon": "Od:", "inviteNewUsers": "Pozvi nové uživatele", - "sendInvitations": "Pošli pozvánky", + "sendInvitations": "Send Invites", "invitationsSent": "Pozvánky odeslány!", "invitationSent": "Pozvánka odeslána!", "invitedFriend": "Invited a Friend", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Nemůžete se sám odebrat!", "groupMemberNotFound": "Uživatel nenalezen mezi členy skupiny.", "mustBeGroupMember": "Musí být členem skupiny.", - "canOnlyInviteEmailUuid": "Lze použít pouze uuids nebo emaily.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Chybějící emailová adresa v pozvánce.", "inviteMissingUuid": "Missing user id in invite", "inviteMustNotBeEmpty": "Invite must not be empty.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", "userWithIDNotFound": "Uživatel s id „<%= userId %>\" nenalezen.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "User does not have a local registration (username, email, password).", "uuidsMustBeAnArray": "User ID invites must be an array.", "emailsMustBeAnArray": "Email address invites must be an array.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Můžete pozvat pouze „<%= maxInvites %>\" najednou.", "partyExceedsMembersLimit": "Party size is limited to <%= maxMembersParty %> members", "onlyCreatorOrAdminCanDeleteChat": "Nemáte oprávnění k smazání této zprávy.", @@ -361,6 +363,10 @@ "liked": "Liked", "joinGuild": "Join Guild", "inviteToGuild": "Invite to Guild", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Message Guild Leader", "donateGems": "Donate Gems", "updateGuild": "Update Guild", diff --git a/website/common/locales/cs/messages.json b/website/common/locales/cs/messages.json index b4fc826449..1bfdea012a 100644 --- a/website/common/locales/cs/messages.json +++ b/website/common/locales/cs/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Id upozornění je potřeba.", "unallocatedStatsPoints": "Máš <%= points %>nepřidělených vlastnostních bodů", "beginningOfConversation": "Toto je začátek tvé konverzace s uživatelem <%= userName %>. Nezapomeň být milý, ucitvý a drž se směrnic komunity!", - "messageDeletedUser": "Omlouváme se, ale tento uživatel smazal svůj účet." + "messageDeletedUser": "Omlouváme se, ale tento uživatel smazal svůj účet.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/cs/npc.json b/website/common/locales/cs/npc.json index b7eca997e8..3052bcf0c4 100644 --- a/website/common/locales/cs/npc.json +++ b/website/common/locales/cs/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Vítej v", "welcomeBack": "Vítej zpět!", "justin": "Justin", - "justinIntroMessage1": "Ahoj! Ty zde musíš být nový. Moje jméno je Justin, jsem tvůj průvodce v zemi Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Pro začátek budeš potřebovat vytvořit tvojí postavu.", "justinIntroMessage3": "Skvěle! Teď - na čem by jsi rád pracoval na tvé výpravě?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "A jsme tu! Vyplnil jsem ti pár úkolů na základě tvých zájmů, takže můžeš ihned začít. Klikni na úkol pro jeho úpravu. nebo přidej nový úkol, který by odpovídal tvé rutině!", "prev": "Předch", "next": "Další", diff --git a/website/common/locales/cs/settings.json b/website/common/locales/cs/settings.json index dbf916a17e..b74d098bc5 100644 --- a/website/common/locales/cs/settings.json +++ b/website/common/locales/cs/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/cs/subscriber.json b/website/common/locales/cs/subscriber.json index e92a7a63f9..e9ea6d38c8 100644 --- a/website/common/locales/cs/subscriber.json +++ b/website/common/locales/cs/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "Thanks for subscribing!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Purchase All", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Předplatitelé mohou zakoupit drahokamy za zlato na Trhu! Pro jednoduchý přístup si můžeš drahokamy také připnout do tvého sloupečku s Odměnami.", "gemsRemaining": "zbývající drahokamy", "notEnoughGemsToBuy": "Nemůžeš zakoupit toto množství drahokamů" diff --git a/website/common/locales/da/character.json b/website/common/locales/da/character.json index d3bfb55535..a0da038417 100644 --- a/website/common/locales/da/character.json +++ b/website/common/locales/da/character.json @@ -7,7 +7,7 @@ "noPhoto": "Denne Habitikaner har ikke tilføjet et foto.", "other": "Andet", "fullName": "Fuldt navn", - "displayName": "Skærmnavn", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Billede", diff --git a/website/common/locales/da/front.json b/website/common/locales/da/front.json index 3747065a75..8c992f53b1 100644 --- a/website/common/locales/da/front.json +++ b/website/common/locales/da/front.json @@ -271,15 +271,9 @@ "emailTaken": "E-mailadressen er allerede brugt til en konto.", "newEmailRequired": "Manglende ny e-mailadresse.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "Kodeord og godkendelse er ikke ens.", "invalidLoginCredentials": "Forkert brugernavn og/eller email og/eller kodeord.", "passwordResetPage": "Nulstil kodeord", @@ -334,7 +328,7 @@ "joinMany": "Tilslut dig over 2,000,000 andre der har det sjovt, imens de opnår deres mål!", "joinToday": "Tilmeld dig Habitica i dag", "signup": "Tilmeld dig", - "getStarted": "Kom i gang", + "getStarted": "Get Started!", "mobileApps": "Mobile Apps", "learnMore": "Lær mere" } \ No newline at end of file diff --git a/website/common/locales/da/generic.json b/website/common/locales/da/generic.json index 94254e52ca..e06a8131b1 100644 --- a/website/common/locales/da/generic.json +++ b/website/common/locales/da/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Bruger ID påkrævet.", "resetFilters": "Ryd alle filtre", "applyFilters": "Brug filtre", + "wantToWorkOn": "I want to work on:", "categories": "Kategorier", "habiticaOfficial": "Officiel Habitica", "animals": "Dyr", diff --git a/website/common/locales/da/groups.json b/website/common/locales/da/groups.json index b228f8e98e..fe0c2c0261 100644 --- a/website/common/locales/da/groups.json +++ b/website/common/locales/da/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Invitér Eksisterende Brugere", "byColon": "Af:", "inviteNewUsers": "Invitér Nye Brugere", - "sendInvitations": "Send Invitationer", + "sendInvitations": "Send Invites", "invitationsSent": "Invitationer sendt!", "invitationSent": "Invitation afsendt!", "invitedFriend": "Invited a Friend", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Du kan ikke fjerne dig selv!", "groupMemberNotFound": "Bruger ikke fundet blandt gruppens medlemmer", "mustBeGroupMember": "Skal være medlem af gruppen", - "canOnlyInviteEmailUuid": "Kan kun invitere via unikke bruger-id eller email.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Manglende emailadresse i invitationen", "inviteMissingUuid": "Manglende bruger-id i invitationen", "inviteMustNotBeEmpty": "Invitér må ikke være tomt.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", "userWithIDNotFound": "Bruger med id'et \"<%= userId %>\" blev ikke fundet.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Bruger har ikke en lokal registrering (brugernavn, email, kodeord).", "uuidsMustBeAnArray": "Invitationer via Bruger-ID skal være en tabel.", "emailsMustBeAnArray": "Invitationer med emailadresse skal være en tabel.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Du kan kun invitere \"<%= maxInvites %>\" ad gangen", "partyExceedsMembersLimit": "Gruppens størrelse er begrænset til <%= maxMembersParty %> medlemmer", "onlyCreatorOrAdminCanDeleteChat": "Ikke bemyndiget til at slette denne besked!", @@ -361,6 +363,10 @@ "liked": "Liked", "joinGuild": "Join Guild", "inviteToGuild": "Invite to Guild", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Message Guild Leader", "donateGems": "Donate Gems", "updateGuild": "Update Guild", diff --git a/website/common/locales/da/messages.json b/website/common/locales/da/messages.json index a1bb3ef1f2..e7f779021b 100644 --- a/website/common/locales/da/messages.json +++ b/website/common/locales/da/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Notafikation ID'er er krævet.", "unallocatedStatsPoints": "You have <%= points %> unallocated Stat Points", "beginningOfConversation": "Dette er begyndelsen på din samtale med <%= userName %>. Husk at være venlig, respektfuld og at følge Retningslinjerne for Fællesskabet!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/da/npc.json b/website/common/locales/da/npc.json index 28aa11c899..66f282409b 100644 --- a/website/common/locales/da/npc.json +++ b/website/common/locales/da/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Welcome to", "welcomeBack": "Welcome back!", "justin": "Justin", - "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, your guide to Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "To start, you'll need to create an avatar.", "justinIntroMessage3": "Great! Now, what are you interested in working on throughout this journey?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Here we are! I've filled out some Tasks for you based on your interests, so you can get started right away. Click a Task to edit or add new Tasks to fit your routine!", "prev": "Prev", "next": "Next", diff --git a/website/common/locales/da/settings.json b/website/common/locales/da/settings.json index e53dc8700d..b6c6936601 100644 --- a/website/common/locales/da/settings.json +++ b/website/common/locales/da/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/da/subscriber.json b/website/common/locales/da/subscriber.json index edf5b8a4a1..a5bd3a68b3 100644 --- a/website/common/locales/da/subscriber.json +++ b/website/common/locales/da/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "Thanks for subscribing!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Purchase All", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "gems remaining", "notEnoughGemsToBuy": "You are unable to buy that amount of gems" diff --git a/website/common/locales/de/character.json b/website/common/locales/de/character.json index a32cd5c0e4..a09edfc4e5 100644 --- a/website/common/locales/de/character.json +++ b/website/common/locales/de/character.json @@ -7,7 +7,7 @@ "noPhoto": "Dieser Habiticaner hat noch kein Foto hinzugefügt.", "other": "Anderes", "fullName": "Name", - "displayName": "Angezeigter Name", + "displayName": "Display name", "changeDisplayName": "Ändere den Anzeigenamen", "newDisplayName": "Neuer Anzeigename", "displayPhoto": "Foto", diff --git a/website/common/locales/de/front.json b/website/common/locales/de/front.json index 3b33195c76..a2f9235ea4 100644 --- a/website/common/locales/de/front.json +++ b/website/common/locales/de/front.json @@ -271,15 +271,9 @@ "emailTaken": "Diese E-Mail-Adresse wird bereits von einem Konto verwendet.", "newEmailRequired": "Fehlende neue E-Mail-Adresse.", "usernameTime": "Es ist Zeit, einen Benutzernamen zu wählen!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Benutzername bereits vergeben.", - "usernameWrongLength": "Benutzernamen müssen zwischen 1 und 20 Zeichen haben.", - "displayNameWrongLength": "Anzeigenamen müssen zwischen 1 und 30 Zeichen haben.", - "usernameBadCharacters": "Benutzernamen dürfen nur Buchstaben von A bis Z, Ziffern von 0 bis 9, Bindstriche oder Unterstriche enthalten.", - "nameBadWords": "Namen dürfen keine unangebrachte Sprache enthalten.", - "confirmUsername": "Bestätige Deinen Benutzernamen!", - "usernameConfirmed": "Benutzername bestätigt", "passwordConfirmationMatch": "Die Passwörter stimmen nicht überein.", "invalidLoginCredentials": "Falscher Benutzername und/oder E-Mail und/oder Passwort.", "passwordResetPage": "Passwort zurücksetzen", @@ -287,7 +281,7 @@ "passwordResetEmailSubject": "Passwort-Reset für Habitica", "passwordResetEmailText": "Wenn Du das Passwort für <%= username %> zurücksetzen möchtest, folge bitte dem Link <%= passwordResetLink %>, um ein neues zu setzen. Dieser Link wird in 24 Stunden ungültig. Wenn du kein Passwort-Reset angefordert hast, kannst Du diese E-Mail ignorieren.", "passwordResetEmailHtml": "Wenn Du das Passwort für <%= username %> auf Habitica zurücksetzen möchtest, folge bitte \">diesem Link , um ein neues zu setzen. Dieser Link wird in 24 Stunden ungültig.

Wenn du kein Passwort-Reset angefordert hast, kannst Du diese E-Mail ignorieren.", - "invalidLoginCredentialsLong": "Uh-oh - your email address / username or password is incorrect.\n- Make sure they are typed correctly. Your username and password are case-sensitive.\n- You may have signed up with Facebook or Google-sign-in, not email so double-check by trying them.\n- If you forgot your password, click \"Forgot Password\".", + "invalidLoginCredentialsLong": "Hoppla - Deine E-Mailadresse / Benutzername oder Passwort ist nicht korrekt.\n- überprüfe die korrekte Schreibweise und beachte die Groß-/Kleinschreibung Deines Benutzernamens und Deiner E-Mailadresse.\n- Es ist möglich, dass Du Dich mit Facebook oder Google-sign-in statt mit Deiner E-Mail registriert hast. Probier Dich damit anzumelden.\n- Wenn Du Dein Passwort vergessen hast, klicke auf \"Passwort vergessen.\"", "invalidCredentials": "Es gibt kein Konto, das diese Anmeldedaten verwendet.", "accountSuspended": "This account, User ID \"<%= userId %>\", has been blocked for breaking the [Community Guidelines](https://habitica.com/static/community-guidelines) or [Terms of Service](https://habitica.com/static/terms). For details or to ask to be unblocked, please email our Community Manager at <%= communityManagerEmail %> or ask your parent or guardian to email them. Please copy your User ID into the email and include your username.", "accountSuspendedTitle": "Dieser Account wurde suspendiert. ", @@ -302,7 +296,7 @@ "signUpWithSocial": "Bei <%= social %> registrieren", "loginWithSocial": "Bei <%= social %> anmelden", "confirmPassword": "Passwort bestätigen", - "usernameLimitations": "Username must be 1 to 20 characters, containing only letters a to z, numbers 0 to 9, hyphens, or underscores, and cannot include any inappropriate terms.", + "usernameLimitations": "Der Benutzername muss zwischen 1 und 20 Buchstaben lang sein und darf nur die Buchstaben von A bis Z, Nummern von 0 bis 9, Bindestriche und Unterstriche beinhalten und darf keine unangemessenen Begriffe enthalten. ", "usernamePlaceholder": "z.B., HabitRabbit", "emailPlaceholder": "z.B., rabbit@beispiel.com", "passwordPlaceholder": "z.B., ******************", @@ -311,15 +305,15 @@ "alreadyHaveAccountLogin": "Du hast schon einen Habitica-Account? Anmelden.", "dontHaveAccountSignup": "Du hast noch kein Habitica-Konto? Melde dich an.", "motivateYourself": "Motiviere Dich selber, Deine Ziele zu erreichen.", - "timeToGetThingsDone": "It's time to have fun when you get things done! Join over <%= userCountInMillions %> million Habiticans and improve your life one task at a time.", + "timeToGetThingsDone": "Zeit für ein bisschen Spass während Du etwas erledigst! Schliess Dich über <%= userCountInMillions %> Millionen Habiticanern an und verbessere Dein Leben mit jeder erledigten Aufgabe.", "singUpForFree": "Kostenlos registrieren", "or": "ODER", "gamifyYourLife": "Mach Dein Leben zum Spiel", - "aboutHabitica": "Habitica is a free habit-building and productivity app that treats your real life like a game. With in-game rewards and punishments to motivate you and a strong social network to inspire you, Habitica can help you achieve your goals to become healthy, hard-working, and happy.", + "aboutHabitica": "Habitica ist eine kostenlose Anwendung zur Gewohnheitsbildung und Steigerung der Produktivität, die Dein Leben wie ein Spiel behandelt. Mit Belohnungen und Bestrafungen als Motivation und einem starken sozialen Netzwerk als Inspiration kann Habitica Dir helfen, Deine Ziele zu erreichen und gesund, fleißig und glücklich zu werden.", "trackYourGoals": "Behalte den Überblick über deine Gewohnheiten und Ziele", "trackYourGoalsDesc": "Bleibe verantwortungsbewusst indem Du Deine Gewohnheiten, täglichen Aufgaben und To-Dos mit Habiticas benutzerfreundlichen Mobile Apps und der Webseite trackst und organisierst.", "earnRewards": "Verdiene Belohnungen für Deine Ziele", - "earnRewardsDesc": "Check off tasks to level up your Avatar and unlock in-game features such as battle armor, mysterious pets, magic skills, and even quests!", + "earnRewardsDesc": "Erledige Aufgaben um deinen Avatar aufzuleveln und schalte Spielfunktionen wie zum Beispiel Schlacht-Rüstungen, mysteriöse Haustiere, magische Fähigkeiten und sogar Quests frei!", "battleMonsters": "Bezwinge Monster mit Freunden", "battleMonstersDesc": "Bezwinge Monster mit anderen Habiticanern! Kaufe mit Deinem verdienten Gold In-Game- oder selbst erstellte Belohnungen, wie eine Episode Deiner Lieblingsserie im Fernsehen ansehen. ", "playersUseToImprove": "Spieler nutzen Habitica, um sich zu verbessern", @@ -334,7 +328,7 @@ "joinMany": "Schließe Dich über 2.000.000 Leuten an und habe Spaß, während Du Deine Aufgaben erfüllst!", "joinToday": "Tritt Habitica heute bei", "signup": "Registrieren", - "getStarted": "Loslegen", + "getStarted": "Get Started!", "mobileApps": "Mobile Apps", "learnMore": "Mehr Erfahren" } \ No newline at end of file diff --git a/website/common/locales/de/gear.json b/website/common/locales/de/gear.json index 7f55a5679d..92e6d8ab0d 100644 --- a/website/common/locales/de/gear.json +++ b/website/common/locales/de/gear.json @@ -260,20 +260,20 @@ "weaponSpecialSpring2018HealerNotes": "Diese Steine in diesem Stab werden Deine Kräfte bündeln, wenn Du Heilzauber anwendest! Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2018 Frühlingsausrüstung.", "weaponSpecialSummer2018RogueText": "Angel", "weaponSpecialSummer2018RogueNotes": "Diese leichte, praktisch unzerbrechliche Stange und Rolle kann zweihändig gehalten werden, um Dein DPS (Drachenfisch Pro Sommer) zu maximieren. Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2018 Sommerausrüstung.", - "weaponSpecialSummer2018WarriorText": "Betta Fish Spear", + "weaponSpecialSummer2018WarriorText": "Kampffisch-Speer", "weaponSpecialSummer2018WarriorNotes": "Mächtig genug für den Kampf, elegant genug für Zeremonien, dieser exquisit gefertigte Speer beweist, dass du dein Zuhause kompromisslos beschützen wirst! Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2018 Sommerausrüstung.", - "weaponSpecialSummer2018MageText": "Lionfish Fin Rays", - "weaponSpecialSummer2018MageNotes": "Underwater, magic based on fire, ice, or electricity can prove hazardous to the Mage wielding it. Conjuring poisonous spines, however, works brilliantly! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2018 Summer Gear.", - "weaponSpecialSummer2018HealerText": "Merfolk Monarch Trident", - "weaponSpecialSummer2018HealerNotes": "With a benevolent gesture, you command healing water to flow through your dominions in waves. Increases Intelligence by <%= int %>. Limited Edition 2018 Summer Gear.", - "weaponSpecialFall2018RogueText": "Vial of Clarity", - "weaponSpecialFall2018RogueNotes": "When you need to come back to your senses, when you need a little boost to make the right decision, take a deep breath and a sip. It'll be OK! Increases Strength by <%= str %>. Limited Edition 2018 Autumn Gear.", - "weaponSpecialFall2018WarriorText": "Whip of Minos", - "weaponSpecialFall2018WarriorNotes": "Not quite long enough to unwind behind you for keeping your bearings in a maze. Well, maybe a very small maze. Increases Strength by <%= str %>. Limited Edition 2018 Autumn Gear.", - "weaponSpecialFall2018MageText": "Staff of Sweetness", - "weaponSpecialFall2018MageNotes": "This is no ordinary lollipop! The glowing orb of magic sugar atop this staff has the power to make good habits stick to you. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2018 Autumn Gear. Two-handed item.", - "weaponSpecialFall2018HealerText": "Starving Staff", - "weaponSpecialFall2018HealerNotes": "Just keep this staff fed, and it will bestow Blessings. If you forget to feed it, keep your fingers out of reach. Increases Intelligence by <%= int %>. Limited Edition 2018 Autumn Gear.", + "weaponSpecialSummer2018MageText": "Feuerfisch-Flossenstachel", + "weaponSpecialSummer2018MageNotes": "Unter Wasser kann sich Magie, die auf Feuer, Eis oder Elektrizität basiert, als gefährlich für den Magier erweisen, der sie benutzt. Das Beschwören von giftigen Stacheln funktioniert jedoch hervorragend! Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Limitierte Ausgabe 2018 Sommerausrüstung.", + "weaponSpecialSummer2018HealerText": "Meervolk-Monarchen-Dreizack", + "weaponSpecialSummer2018HealerNotes": "Mit einer wohlwollenden Geste befiehlst du Heilwasser, in Wellen durch deine Herrschaften zu fließen. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2018 Sommerausrüstung.", + "weaponSpecialFall2018RogueText": "Ampulle der Klarheit", + "weaponSpecialFall2018RogueNotes": "Wenn du zu deinen Sinnen zurückkehren musst, wenn du einen kleinen Schub brauchst, um die richtige Entscheidung zu treffen, atme tief durch und trink einen Schluck. Es wird alles gut! Erhöht Intelligenz um <%= str %>. Limitierte Ausgabe 2018 Herbstausrüstung.", + "weaponSpecialFall2018WarriorText": "Peitsche des Minos", + "weaponSpecialFall2018WarriorNotes": "Nicht ganz lange genug, um sie hinter Dir abzuwickeln, um Dich in einem Labyrinth zurechtzufinden. Nun, vielleicht in einem sehr kleinen Labyrinth. Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2018 Herbstausrüstung.", + "weaponSpecialFall2018MageText": "Stab der Süße", + "weaponSpecialFall2018MageNotes": "Das ist kein gewöhnlicher Lolli! Die leuchtende Kugel aus magischem Zucker auf diesem Stab hat die Macht, gute Gewohnheiten an dir festzuhalten. Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Limitierte Ausgabe 2018 Herbstausrüstung. Zweihändiger Gegenstand.", + "weaponSpecialFall2018HealerText": "Stab des Verhungerns", + "weaponSpecialFall2018HealerNotes": "Halte diesen Stab nur gefüttert, und er wird Segen spenden. Wenn Du vergisst, ihn zu füttern, halte Deine Finger außer Reichweite. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2018 Herbstausrüstung.", "weaponMystery201411Text": "Forke des Feierns", "weaponMystery201411Notes": "Erstich Deine Feinde oder verschling Dein Lieblingsessen - diese flexible Forke ist universell einsetzbar! Gewährt keinen Attributbonus. Abonnentengegenstand, November 2014.", "weaponMystery201502Text": "Schimmernder Flügelstab der Liebe und auch der Wahrheit", @@ -337,7 +337,7 @@ "weaponArmoireMerchantsDisplayTrayText": "Auslage des Händlers", "weaponArmoireMerchantsDisplayTrayNotes": "Benutze diese lackierte Auslage, um die edlen Dinge zu zeigen, die Du zum Verkauf anbietest. Erhöht die Intelligenz um <%= int %>. Verzauberter Schrank: Händler-Set (Gegenstand 3 von 3).", "weaponArmoireBattleAxeText": "Uralte Axt", - "weaponArmoireBattleAxeNotes": "Diese gute Eisenaxt eignet sich bestens, um Deine ärgsten Gegner und Deine schwierigsten Aufgaben zu bekämpfen. Erhöht Intelligenz um <%= int %> und Ausdauer um <%= con %>. Verzauberter Schrank: Unabhängiger Gegenstand.", + "weaponArmoireBattleAxeNotes": "Diese gute eiserne Axt eignet sich bestens, um Deine ärgsten Gegner und Deine schwierigsten Aufgaben zu bekämpfen. Erhöht Intelligenz um <%= int %> und Ausdauer um <%= con %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "weaponArmoireHoofClippersText": "Hufschere", "weaponArmoireHoofClippersNotes": "Schneide die Hufe Deiner hart arbeitenden Reittiere, damit sie gesund bleiben während sie Dich ins Abenteuer tragen! Erhöht Stärke, Intelligenz und Ausdauer jeweils um <%= attrs %>. Verzauberter Schrank: Hufschmiedset (Gegenstand 1 von 3).", "weaponArmoireWeaversCombText": "Kamm des Webers", @@ -347,21 +347,21 @@ "weaponArmoireCoachDriversWhipText": "Peitsche des Kutschers", "weaponArmoireCoachDriversWhipNotes": "Da Deine Rösser wissen, was sie tun, ist diese Peitsche nur zur Zierde (und ein ordentliches Knallen!) gut. Erhöht Intelligenz um <%= int %> und Stärke u <%= str %>. Verzauberter Schrank: Kutscherset (Gegenstand 3 von 3).", "weaponArmoireScepterOfDiamondsText": "Diamantenzepter", - "weaponArmoireScepterOfDiamondsNotes": "This scepter shines with a warm red glow as it grants you increased willpower. Increases Strength by <%= str %>. Enchanted Armoire: King of Diamonds Set (Item 3 of 4).", + "weaponArmoireScepterOfDiamondsNotes": "Dieses Zepter leuchtet mit einem warmen roten Licht, da es dir mehr Willenskraft verleiht. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Diamantenkönig-Set (Gegenstand 3 von 4).", "weaponArmoireFlutteryArmyText": "Flatternde Freunde", - "weaponArmoireFlutteryArmyNotes": "This group of scrappy lepidopterans is ready to flap fiercely and cool down your reddest tasks! Increases Constitution, Intelligence, and Strength by <%= attrs %> each. Enchanted Armoire: Fluttery Frock Set (Item 3 of 4).", + "weaponArmoireFlutteryArmyNotes": "Diese bunte Gruppe von Faltern freut sich darauf, Deine rotesten Aufgaben durch heftiges Flattern herabzukühlen! Erhöht Ausdauer, Intelligenz und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Flatterndes Frack-Set (Gegenstand 3 von 4).", "weaponArmoireCobblersHammerText": "Schusters Hammer", - "weaponArmoireCobblersHammerNotes": "This hammer is specially made for leatherwork. It can do a real number on a red Daily in a pinch, though. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 2 of 3).", - "weaponArmoireGlassblowersBlowpipeText": "Glassblower's Blowpipe", - "weaponArmoireGlassblowersBlowpipeNotes": "Use this tube to blow molten glass into beautiful vases, ornaments, and other fancy things. Increases Strength by <%= str %>. Enchanted Armoire: Glassblower Set (Item 1 of 4).", + "weaponArmoireCobblersHammerNotes": "Dieser Hammer ist speziell für die Lederverarbeitung entwickelt worden. Er kann aber auch ganz locker rote tägliche Aufgaben klein machen. Erhöht Ausdauer und Stärke um je <%= attrs %>. Verzauberter Schrank: Schuster-Set (Gegenstand 2 von 3).", + "weaponArmoireGlassblowersBlowpipeText": "Blasrohr des Glasbläsers", + "weaponArmoireGlassblowersBlowpipeNotes": "Verwende dieses Rohr, um geschmolzenes Glas in schöne Vasen, Ornamente und andere ausgefallene Dinge zu blasen. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Glasbläser-Set (Gegenstand 1 von 4).", "weaponArmoirePoisonedGobletText": "Vergifteter Kelch", - "weaponArmoirePoisonedGobletNotes": "Use this to build your resistance to iocane powder and other inconceivably dangerous poisons. Increases Intelligence by <%= int %>. Enchanted Armoire: Piratical Princess Set (Item 3 of 4).", + "weaponArmoirePoisonedGobletNotes": "Benutze dies, um Deine Widerstandsfähigkeit gegen Iokanpulver und andere unvorstellbar gefährliche Gifte aufzubauen. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Piratiges Prinzessinnen-Set (Gegenstand 3 von 4).", "weaponArmoireJeweledArcherBowText": "Juwelenbesetzter Pfeilbogen", - "weaponArmoireJeweledArcherBowNotes": "This bow of gold and gems will send your arrows to their targets at incredible speed. Increases Intelligence by <%= int %>. Enchanted Armoire: Jeweled Archer Set (Item 3 of 3).", - "weaponArmoireNeedleOfBookbindingText": "Needle of Bookbinding", - "weaponArmoireNeedleOfBookbindingNotes": "You'd be surprised at how tough books can be. This needle can pierce right to the heart of your chores. Increases Strength by <%= str %>. Enchanted Armoire: Bookbinder Set (Item 3 of 4).", - "weaponArmoireSpearOfSpadesText": "Spear of Spades", - "weaponArmoireSpearOfSpadesNotes": "This knightly lance is perfect for attacking your reddest Habits and Dailies. Increases Constitution by <%= con %>. Enchanted Armoire: Ace of Spades Set (Item 3 of 3).", + "weaponArmoireJeweledArcherBowNotes": "Dieser Bogen aus Gold und Edelsteinen wird deine Pfeile mit unglaublicher Geschwindigkeit zu ihren Zielen schicken. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Juwelenbesetztes Bogenschützen-Set (Gegenstand 3 von 3).", + "weaponArmoireNeedleOfBookbindingText": "Nadel der Buchbinderei", + "weaponArmoireNeedleOfBookbindingNotes": "Du wärst überrascht, wie hart Bücher sein können. Diese Nadel kann sich bis ins Herz Deiner Aufgaben bohren. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Buchbinder-Set (Gegenstand 3 von 4).", + "weaponArmoireSpearOfSpadesText": "Pik-Speer", + "weaponArmoireSpearOfSpadesNotes": "Diese ritterliche Lanze ist perfekt, um deine rötesten Gewohnheiten und täglichen Aufgaben anzugreifen. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Pik-Ass-Set (Gegenstand 3 von 3).", "armor": "Rüstung", "armorCapitalized": "Rüstung", "armorBase0Text": "Schlichte Kleidung", @@ -596,22 +596,22 @@ "armorSpecialSpring2018MageNotes": "Deine Zauberfertigkeiten können sich nur verbessern, wenn Du in diese weichen, seidigen Blütenblätter gehüllt bist. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2018 Frühlingsausrüstung.", "armorSpecialSpring2018HealerText": "Granatrüstung", "armorSpecialSpring2018HealerNotes": "Lass diese leuchtend rote Rüstung Deinem Herzen die Kraft zur Heilung geben. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2018 Frühlingsausrüstung.", - "armorSpecialSummer2018RogueText": "Pocket Fishing Vest", - "armorSpecialSummer2018RogueNotes": "Bobbers? Boxes of hooks? Spare line? Lockpicks? Smoke bombs? Whatever you need on hand for your summer fishing getaway, there's a pocket for it! Increases Perception by <%= per %>. Limited Edition 2018 Summer Gear.", - "armorSpecialSummer2018WarriorText": "Betta Tail Armor", - "armorSpecialSummer2018WarriorNotes": "Dazzle onlookers with whorls of magnificent color as you spin and dart through the water. How could any opponent dare strike at this beauty? Increases Constitution by <%= con %>. Limited Edition 2018 Summer Gear.", - "armorSpecialSummer2018MageText": "Lionfish Scale Hauberk", + "armorSpecialSummer2018RogueText": "Taschen-Angelweste", + "armorSpecialSummer2018RogueNotes": "Schwimmer? Kisten mit Haken? Ersatzleine? Dietriche? Rauchbomben? Was auch immer Du für Deinen Sommer-Fischerurlaub zur Hand benötigst, es gibt eine Tasche dafür! Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2018 Sommerausrüstung.", + "armorSpecialSummer2018WarriorText": "Kampffisch-Schwanz-Rüstung", + "armorSpecialSummer2018WarriorNotes": "Blende die Zuschauer mit Wirbeln von prächtiger Farbe, während Du Dich drehst und durch das Wasser wirbelst. Wie könnte es ein Gegner wagen, diese Schönheit anzugreifen? Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2018 Sommerausrüstung.", + "armorSpecialSummer2018MageText": "Feuerfisch-Schuppenhemd", "armorSpecialSummer2018MageNotes": "Die Giftmagie hat den Ruf, subtil zu sein. Nicht so diese farbenfrohe Rüstung, deren Botschaft an Bestien sowie Aufgaben klar ist: Pass auf! Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2018 Sommerausrüstung.", - "armorSpecialSummer2018HealerText": "Merfolk Monarch Robes", - "armorSpecialSummer2018HealerNotes": "These cerulean vestments reveal that you have land-walking feet... well. Not even a monarch can be expected to be perfect. Increases Constitution by <%= con %>. Limited Edition 2018 Summer Gear.", - "armorSpecialFall2018RogueText": "Alter Ego Frock Coat", - "armorSpecialFall2018RogueNotes": "Style for the day. Comfort and protection for the night. Increases Perception by <%= per %>. Limited Edition 2018 Autumn Gear.", - "armorSpecialFall2018WarriorText": "Minotaur Platemail", - "armorSpecialFall2018WarriorNotes": "Complete with hooves to drum a soothing cadence as you walk your meditative labyrinth. Increases Constitution by <%= con %>. Limited Edition 2018 Autumn Gear.", - "armorSpecialFall2018MageText": "Candymancer's Robes", - "armorSpecialFall2018MageNotes": "The fabric of these robes has magic candy woven right in! However, we recommend you not attempt to eat them. Increases Intelligence by <%= int %>. Limited Edition 2018 Autumn Gear.", - "armorSpecialFall2018HealerText": "Robes of Carnivory", - "armorSpecialFall2018HealerNotes": "It's made from plants, but that doesn't mean it's vegetarian. Bad habits are afraid to come within miles of these robes. Increases Constitution by <%= con %>. Limited Edition 2018 Autumn Gear.", + "armorSpecialSummer2018HealerText": "Meervolk-Monarchen-Robe", + "armorSpecialSummer2018HealerNotes": "Diese körnigen Gewänder zeigen, dass du bodenständige Füße hast.... naja. Nicht einmal von einem Monarch kann erwartet werden, dass er perfekt ist. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2018 Sommerausrüstung.", + "armorSpecialFall2018RogueText": "Alter Ego Frack-Jacke", + "armorSpecialFall2018RogueNotes": "Stil für den Tag. Komfort und Schutz für die Nacht. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2018 Herbstausrüstung.", + "armorSpecialFall2018WarriorText": "Minotaurus-Plattenpanzer", + "armorSpecialFall2018WarriorNotes": "Komplett mit Hufen, um eine beruhigende Kadenz zu erzeugen, während Du durch Dein meditatives Labyrinth gehst. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2018 Herbstausrüstung.", + "armorSpecialFall2018MageText": "Robe des Süßigkeitenbeschwörers", + "armorSpecialFall2018MageNotes": "Der Stoff dieser Roben hat magische Süßigkeiten direkt eingewebt! Wir empfehlen Dir jedoch, sie nicht zu essen. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2018 Herbstausrüstung.", + "armorSpecialFall2018HealerText": "Roben der Fleischfresserei", + "armorSpecialFall2018HealerNotes": "Sie sind aus Pflanzen hergestellt, aber das bedeutet nicht, dass sie vegetarisch sind. Schlechte Gewohnheiten fürchten sich davor, in die Nähe dieser Roben zu kommen. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2018 Herbstausrüstung.", "armorMystery201402Text": "Robe des Nachrichtenbringers", "armorMystery201402Notes": "Schimmernd, stabil und mit vielen Taschen für Briefe. Gewährt keinen Attributbonus. Abonnentengegenstand, Februar 2014.", "armorMystery201403Text": "Waldwanderer-Rüstung", @@ -680,12 +680,12 @@ "armorMystery201806Notes": "Dieser gewundene Schwanz hat leuchtende Punkte, die Dir den Weg durch die Tiefe erleuchten. Gewährt keinen Attributbonus. Abonnentengegenstand, Juni 2018.", "armorMystery201807Text": "Schwanz der Seeschlange", "armorMystery201807Notes": "Dieser mächtige Schwanz wird Dich mit unglaublicher Geschwindigkeit durch das Meer treiben! Gewährt keinen Attributbonus. Abonnentengegenstand, Juli 2018.", - "armorMystery201808Text": "Lava Dragon Armor", - "armorMystery201808Notes": "This armor is made from the shed scales of the elusive (and extremely warm) Lava Dragon. Confers no benefit. August 2018 Subscriber Item.", - "armorMystery201809Text": "Armor of Autumn Leaves", - "armorMystery201809Notes": "You are not only a small and fearsome leaf puff, you are sporting the most beautiful colors of the season! Confers no benefit. September 2018 Subscriber Item.", - "armorMystery201810Text": "Dark Forest Robes", - "armorMystery201810Notes": "These robes are extra warm to protect you from the ghastly cold of haunted realms. Confers no benefit. October 2018 Subscriber Item.", + "armorMystery201808Text": "Lava-Drachen-Rüstung", + "armorMystery201808Notes": "Diese Rüstung besteht aus den abgeworfenen Schuppen des schwer fassbaren (und extrem warmen) Lavadrachens. Gewährt keinen Attributbonus. Abonnentengegenstand, August 2018.", + "armorMystery201809Text": "Rüstung aus Herbstlaub", + "armorMystery201809Notes": "Du bist nicht nur ein kleiner und furchterregender Blätterwirbel, Du hast die schönsten Farben der Saison! Gewährt keinen Attributbonus. Abonnentengegenstand, September 2018.", + "armorMystery201810Text": "Dunkelwald-Roben", + "armorMystery201810Notes": "Diese Gewänder sind extra warm, um dich vor der schauderhaften Kälte der verfluchten Reiche zu schützen. Gewährt keinen Attributbonus. Abonnentengegenstand, Oktober 2018.", "armorMystery301404Text": "Steampunkanzug", "armorMystery301404Notes": "Adrett und schneidig, hoho! Gewährt keinen Attributbonus. Abonnentengegenstand, Februar 3015.", "armorMystery301703Text": "Steampunk-Pfauen-Robe", @@ -739,7 +739,7 @@ "armorArmoireWoodElfArmorText": "Waldelfenrüstung", "armorArmoireWoodElfArmorNotes": "Diese Rüstung aus Rinde und Blättern dient als langlebige Tarnung im Wald. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Waldelfenset (Gegenstand 2 von 3).", "armorArmoireRamFleeceRobesText": "Widderfellroben", - "armorArmoireRamFleeceRobesNotes": "These robes keep you warm even through the fiercest blizzard. Increases Constitution by <%= con %> and Strength by <%= str %>. Enchanted Armoire: Ram Barbarian Set (Item 2 of 3).", + "armorArmoireRamFleeceRobesNotes": "Diese Gewänder halten Dich auch im heftigsten Schneesturm warm. Erhöht Ausdauer um <%= con %> und Stärke um <%= str %>. Verzauberter Schrank: Festival-Tracht Set (Gegenstand 2 von 3).", "armorArmoireGownOfHeartsText": "Herzkleid", "armorArmoireGownOfHeartsNotes": "Dieses Kleid hat alles, was Du brauchst! Aber das ist nicht alles, es wird auch die Stärke Deines Herzens steigern. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Herzkönigin Set (Gegenstand 2 von 3).", "armorArmoireMushroomDruidArmorText": "Pilzdruiden-Rüstung", @@ -759,7 +759,7 @@ "armorArmoireFarrierOutfitText": "Hufschmiedoutfit", "armorArmoireFarrierOutfitNotes": "Diese robuste Arbeitskleidung hält dem unordentlichsten Stall stand. Erhöht Intelligenz, Ausdauer und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Hufschmiedset (Gegenstand 2 von 3).", "armorArmoireCandlestickMakerOutfitText": "Kerzenmachergewand", - "armorArmoireCandlestickMakerOutfitNotes": "Dieses robuste Kleidungsstück schützt Dich vor heißem Kerzenwachs, während Du Deinem Handwerk nachgehst. Erhöht Ausdauer um<%= con %>. Verzauberter Schrank Kerzenmacher-Set (Gegenstand 1 von 3).", + "armorArmoireCandlestickMakerOutfitNotes": "Dieses robuste Kleidungsstück schützt Dich vor heißem Kerzenwachs, während Du Deinem Handwerk nachgehst. Erhöht Ausdauer um<%= con %>. Verzauberter Schrank: Kerzenmacher-Set (Gegenstand 1 von 3).", "armorArmoireWovenRobesText": "Gewebte Robe", "armorArmoireWovenRobesNotes": "Zeige stolz Deine Weber-Kunst, indem Du diese farbenfrohe Robe trägst! Erhöht Ausdauer um <%= con %> und Intelligenz um <%= int %>. Verzauberter Schrank: Weber-Set (Gegenstand 1 von 3).", "armorArmoireLamplightersGreatcoatText": "Laternenanzünder-Mantel", @@ -767,25 +767,25 @@ "armorArmoireCoachDriverLiveryText": "Livree des Kutschers", "armorArmoireCoachDriverLiveryNotes": "Dieser schwere Übermantel wird Dich beim Fahren vor dem Wetter schützen. Außerdem sieht er auch noch flott aus! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Kutscherset (Gegenstand 1 von 3).", "armorArmoireRobeOfDiamondsText": "Diamantenrobe", - "armorArmoireRobeOfDiamondsNotes": "These royal robes not only make you appear noble, they allow you to see the nobility within others. Increases Perception by <%= per %>. Enchanted Armoire: King of Diamonds Set (Item 1 of 4).", + "armorArmoireRobeOfDiamondsNotes": "Diese königlichen Roben lassen dich nicht nur nobel aussehen, sie gewähren dir auch Einblick in die Vornehmheit anderer. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Diamantkönig Set (Item 1 von 4).", "armorArmoireFlutteryFrockText": "Flatterndes Kleid", - "armorArmoireFlutteryFrockNotes": "A light and airy gown with a wide skirt the butterflies might mistake for a giant blossom! Increases Constitution, Perception, and Strength by <%= attrs %> each. Enchanted Armoire: Fluttery Frock Set (Item 1 of 4).", - "armorArmoireCobblersCoverallsText": "Cobbler's Coveralls", - "armorArmoireCobblersCoverallsNotes": "These sturdy coveralls have lots of pockets for tools, leather scraps, and other useful items! Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 1 of 3).", - "armorArmoireGlassblowersCoverallsText": "Glassblower's Coveralls", - "armorArmoireGlassblowersCoverallsNotes": "These coveralls will protect you while you're making masterpieces with hot molten glass. Increases Constitution by <%= con %>. Enchanted Armoire: Glassblower Set (Item 2 of 4).", - "armorArmoireBluePartyDressText": "Blue Party Dress", - "armorArmoireBluePartyDressNotes": "You're perceptive, tough, smart, and so fashionable! Increases Perception, Strength, and Constitution by <%= attrs %> each. Enchanted Armoire: Blue Hairbow Set (Item 2 of 2).", - "armorArmoirePiraticalPrincessGownText": "Piratical Princess Gown", - "armorArmoirePiraticalPrincessGownNotes": "This luxuriant garment has many pockets for concealing weapons and loot! Increases Perception by <%= per %>. Enchanted Armoire: Piratical Princess Set (Item 2 of 4).", - "armorArmoireJeweledArcherArmorText": "Jeweled Archer Armor", - "armorArmoireJeweledArcherArmorNotes": "This finely crafted armor will protect you from projectiles or errant red Dailies! Increases Constitution by <%= con %>. Enchanted Armoire: Jeweled Archer Set (Item 2 of 3).", - "armorArmoireCoverallsOfBookbindingText": "Coveralls of Bookbinding", - "armorArmoireCoverallsOfBookbindingNotes": "Everything you need in a set of coveralls, including pockets for everything. A pair of goggles, loose change, a golden ring... Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Bookbinder Set (Item 2 of 4).", - "armorArmoireRobeOfSpadesText": "Robe of Spades", - "armorArmoireRobeOfSpadesNotes": "These luxuriant robes conceal hidden pockets for treasures or weapons--your choice! Increases Strength by <%= str %>. Enchanted Armoire: Ace of Spades Set (Item 2 of 3).", - "armorArmoireSoftBlueSuitText": "Soft Blue Suit", - "armorArmoireSoftBlueSuitNotes": "Blue is a calming colour. So calming, some even wear this soft outfit to sleep... zZz. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Blue Loungewear Set (Item 2 of 3).", + "armorArmoireFlutteryFrockNotes": "Ein leichtes und luftiges Kleid mit einem breiten Rock, den die Schmetterlinge für eine Riesenblüte halten könnten! Erhöht Ausdauer, Wahrnehmung und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Flatterndes Frack-Set (Gegenstand 1 von 4).", + "armorArmoireCobblersCoverallsText": "Schuster-Overall", + "armorArmoireCobblersCoverallsNotes": "Diese robusten Overalls haben viele Taschen für Werkzeuge, Lederreste und andere nützliche Gegenstände! Erhöht Wahrnehmung und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Schuster-Set (Gegenstand 1 von 3).", + "armorArmoireGlassblowersCoverallsText": "Glasbläser-Overall", + "armorArmoireGlassblowersCoverallsNotes": "Dieser Overall schützt Dich, während Du Meisterwerke aus heißem, geschmolzenem Glas herstellst. Erhöht Ausdauer und Stärke jeweils um <%= con %>. Verzauberter Schrank: Glasbläser-Set (Gegenstand 2 von 4).", + "armorArmoireBluePartyDressText": "Blauer Partydress", + "armorArmoireBluePartyDressNotes": "Du bist scharfsinnig, zäh, klug und so modisch! Erhöht Wahrnehmung, Stärke und Ausdauer jeweils um <%= attrs %>. Verzauberter Schrank: Blaues Haarschleifen-Set (Gegenstand 2 von 2).", + "armorArmoirePiraticalPrincessGownText": "Piratiges Prinzessinnen-Gewand", + "armorArmoirePiraticalPrincessGownNotes": "Dieses luxuriöse Kleidungsstück hat viele Taschen, um Waffen und Beute zu verstecken! Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Piratiges Prinzessinnen-Set (Gegenstand 2 von 4).", + "armorArmoireJeweledArcherArmorText": "Juwelenbesetzte Bogenschützen-Rüstung", + "armorArmoireJeweledArcherArmorNotes": "Diese fein gearbeitete Rüstung schützt Dich vor Projektilen oder umherirrenden roten täglichen Aufgaben! Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Juwelenbesetztes Bogenschützen-Set (Gegenstand 2 von 3).", + "armorArmoireCoverallsOfBookbindingText": "Overall der Buchbinderei", + "armorArmoireCoverallsOfBookbindingNotes": "Alles, was Du in einem Set von Overalls brauchst, inklusive Taschen für alles. Eine Brille, Kleingeld, ein goldener Ring... Erhöht Ausdauer um <%= con %> und Wahrnehmung um <%= per %>. Verzauberter Schrank: Buchbinder-Set (Gegenstand 2 von 4).", + "armorArmoireRobeOfSpadesText": "Pik-Roben", + "armorArmoireRobeOfSpadesNotes": "Diese üppigen Gewänder verbergen geheime Taschen für Schätze oder Waffen - Deine Wahl! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Pik-Ass-Set (Gegenstand 2 von 3).", + "armorArmoireSoftBlueSuitText": "Weicher Blauer Anzug", + "armorArmoireSoftBlueSuitNotes": "Blau ist eine beruhigende Farbe. So beruhigend, dass einige sogar dieses weiche Outfit zum Schlafen tragen... zZz. Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Verzauberter Schrank: Blaues Loungewear-Set (Gegenstand 2 von 3).", "headgear": "Helm", "headgearCapitalized": "Kopfschutz", "headBase0Text": "Keine Kopfbedeckung", @@ -833,7 +833,7 @@ "headSpecial0Text": "Schattenhelm", "headSpecial0Notes": "Blut und Asche, Lava und Obsidian geben diesem Helm sein Erscheinungsbild und seine Macht. Erhöht Intelligenz um <%= int %>.", "headSpecial1Text": "Kristallhelm", - "headSpecial1Notes": "The favored crown of those who lead by example. Increases all Stats by <%= attrs %>.", + "headSpecial1Notes": "Die Lieblingskrone derer, die mit gutem Beispiel vorangehen. Erhöht alle Attribute um <%= attrs %>.", "headSpecial2Text": "Namenloser Helm", "headSpecial2Notes": "Ein Andenken an jene, die gegeben haben ohne eine Gegenleistung zu verlangen. Erhöht Intelligenz und Stärke um jeweils <%= attrs %>.", "headSpecialTakeThisText": "Take This-Helm", @@ -1005,13 +1005,13 @@ "headSpecialNye2017Text": "reich verzierter Partyhut", "headSpecialNye2017Notes": "Du hast einen fantasievollen Partyhut erhalten! Trag ihn mit Stolz, während Du ins neue Jahr hineinfeierst! Gewährt keinen Attributbonus.", "headSpecialWinter2018RogueText": "Rentierhelm", - "headSpecialWinter2018RogueNotes": "The perfect holiday disguise, with a built-in headlight! Increases Perception by <%= per %>. Limited Edition 2017-2018 Winter Gear.", + "headSpecialWinter2018RogueNotes": "Die perfekte Weihnachtsverkleidung, mit eingebautem Scheinwerfer! Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2017-2018 Winterausrüstung.", "headSpecialWinter2018WarriorText": "Geschenkschachtelhelm", - "headSpecialWinter2018WarriorNotes": "This jaunty box top and bow are not only festive, but quite sturdy. Increases Strength by <%= str %>. Limited Edition 2017-2018 Winter Gear.", + "headSpecialWinter2018WarriorNotes": "Dieses flotte Päckchen mit Schleife ist nicht nur festlich, sondern auch ziemlich stabil. Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2017-2018 Winterausrüstung.", "headSpecialWinter2018MageText": "Glitzernder Zylinder", - "headSpecialWinter2018MageNotes": "Ready for some extra special magic? This glittery hat is sure to boost all your spells! Increases Perception by <%= per %>. Limited Edition 2017-2018 Winter Gear.", + "headSpecialWinter2018MageNotes": "Bereit für eine ganz besondere Magie? Dieser glitzernde Hut wird garantiert alle Deine Zauber verstärken! Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2017-2018 Winterausrüstung.", "headSpecialWinter2018HealerText": "Mistelzweigkapuze", - "headSpecialWinter2018HealerNotes": "This fancy hood will keep you warm with happy holiday feelings! Increases Intelligence by <%= int %>. Limited Edition 2017-2018 Winter Gear.", + "headSpecialWinter2018HealerNotes": "Diese schicke Kapuze wird Dich mit fröhlichen Weihnachtsgefühlen warm halten! Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2017-2018 Winterausrüstung.", "headSpecialSpring2018RogueText": "Entenschnabel-Helm", "headSpecialSpring2018RogueNotes": "Quak quak! Deine Niedlichkeit täuscht über Deine schlaue und listige Natur hinweg. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2018 Frühlingsausrüstung.", "headSpecialSpring2018WarriorText": "Strahlenhelm", @@ -1020,22 +1020,22 @@ "headSpecialSpring2018MageNotes": "Die kunstvoll arrangierten Blütenblätter dieses Helms gewähren Dir besondere Frühlingszauber. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2018 Frühlingsausrüstung.", "headSpecialSpring2018HealerText": "Granatreif", "headSpecialSpring2018HealerNotes": "Die polierten Edelsteine dieses Diadems verstärken Deine mentale Energie. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2018 Frühlingsausrüstung.", - "headSpecialSummer2018RogueText": "Fishing Sun Hat", - "headSpecialSummer2018RogueNotes": "Provides comfort and protection from the harsh glare of the summer sun over the water. Especially important if you're more accustomed to staying stealthy in the shadows! Increases Perception by <%= per %>. Limited Edition 2018 Summer Gear.", - "headSpecialSummer2018WarriorText": "Betta Fish Barbute", - "headSpecialSummer2018WarriorNotes": "Show everyone you're the alpha betta with this flamboyant helm! Increases Strength by <%= str %>. Limited Edition 2018 Summer Gear.", - "headSpecialSummer2018MageText": "Lionfish Crest", - "headSpecialSummer2018MageNotes": "Glare dolorously upon anyone who dares say you look like a “tastyfish”. Increases Perception by <%= per %>. Limited Edition 2018 Summer Gear.", - "headSpecialSummer2018HealerText": "Merfolk Monarch Crown", - "headSpecialSummer2018HealerNotes": "Adorned with aquamarine, this finned diadem marks leadership of folk, fish, and those who are a bit of both! Increases Intelligence by <%= int %>. Limited Edition 2018 Summer Gear.", - "headSpecialFall2018RogueText": "Alter Ego Face", - "headSpecialFall2018RogueNotes": "Most of us hide away our inward struggles. This mask shows that we all experience tension between our good and bad impulses. Plus it comes with a sweet hat! Increases Perception by <%= per %>. Limited Edition 2018 Autumn Gear.", - "headSpecialFall2018WarriorText": "Minotaur Visage", - "headSpecialFall2018WarriorNotes": "This fearsome mask shows you can really take your tasks by the horns! Increases Strength by <%= str %>. Limited Edition 2018 Autumn Gear.", - "headSpecialFall2018MageText": "Candymancer's Hat", - "headSpecialFall2018MageNotes": "This pointy hat is imbued with powerful spells of sweetness. Careful, if it gets wet it may become sticky! Increases Perception by <%= per %>. Limited Edition 2018 Autumn Gear.", - "headSpecialFall2018HealerText": "Ravenous Helm", - "headSpecialFall2018HealerNotes": "This helm is fashioned from a carnivorous plant renowned for its ability to dispatch zombies and other inconveniences. Just watch out that it doesn't chew on your head. Increases Intelligence by <%= int %>. Limited Edition 2018 Autumn Gear.", + "headSpecialSummer2018RogueText": "Fischer-Sonnenhut", + "headSpecialSummer2018RogueNotes": "Bietet Komfort und Schutz vor der harten blendenden Sommersonne über dem Wasser. Besonders wichtig, wenn Sie es gewohnt sind, heimlich im Schatten zu bleiben! Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2018 Sommerausrüstung.", + "headSpecialSummer2018WarriorText": "Kampffisch-Barbute", + "headSpecialSummer2018WarriorNotes": "Mit diesem extravaganten Helm kannst du allen zeigen, dass Du der Alpha-Kampffisch bist! Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2018 Sommerausrüstung.", + "headSpecialSummer2018MageText": "Feuerfisch-Kopfputz", + "headSpecialSummer2018MageNotes": "Starre jeden gequält an, der es wagt zu sagen, dass du wie ein \"Leckerbissenfisch\" aussiehst. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2018 Sommerausrüstung.", + "headSpecialSummer2018HealerText": "Meervolk-Monarchen-Krone", + "headSpecialSummer2018HealerNotes": "Dieses mit Aquamarin verzierte Diadem markiert die Führung von Volk, Fisch und denen, die ein wenig von beidem sind! Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2018 Sommerausrüstung.", + "headSpecialFall2018RogueText": "Alter Ego Gesicht", + "headSpecialFall2018RogueNotes": "Die meisten von uns verstecken ihre inneren Kämpfe. Diese Maske zeigt, dass wir alle eine Spannung zwischen unseren guten und schlechten Impulsen erleben. Außerdem kommt sie mit einem netten Hut! Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2018 Herbstausrüstung.", + "headSpecialFall2018WarriorText": "Minotaurus-Maske", + "headSpecialFall2018WarriorNotes": "Diese furchterregende Maske zeigt, dass du deine Aufgaben wirklich bei den Hörnern packen kannst! Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2018 Herbstausrüstung.", + "headSpecialFall2018MageText": "Hut des Süßigkeitenbeschwörers", + "headSpecialFall2018MageNotes": "Dieser spitze Hut ist von mächtigen Zaubersprüchen der Süße erfüllt. Vorsicht, wenn er nass wird, könnte er klebrig werden! Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2018 Herbstausrüstung.", + "headSpecialFall2018HealerText": "Raubgieriger Helm", + "headSpecialFall2018HealerNotes": "Dieser Helm ist aus einer fleischfressenden Pflanze gefertigt, die für ihre Fähigkeit bekannt ist, Zombies und andere Unannehmlichkeiten zu erledigen. Pass nur auf, dass er nicht auf Deinem Kopf herumkaut. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2018 Herbstausrüstung.", "headSpecialGaymerxText": "Regenbogenkriegerhelm", "headSpecialGaymerxNotes": "Zur Feier der GaymerX-Konferenz ist dieser spezielle Helm dekoriert mit einem strahlenden, farbenfrohen Regenbogenmuster! GaymerX ist eine Videospiel-Tagung, die LGBTQ und Videospiele feiert und für alle offen ist.", "headMystery201402Text": "Geflügelter Helm", @@ -1110,12 +1110,12 @@ "headMystery201806Notes": "Das hypnotisierende Licht auf diesem Helm wird alle Kreaturen des Meeres an Deine Seite rufen. Wir empfehlen Dir, Deine glühende Anziehungskraft für das Gute zu nutzen! Gewährt keinen Attributbonus. Abonnentengegenstand, Juni 2018.", "headMystery201807Text": "Helm der Seeschlange", "headMystery201807Notes": "Die starken Schuppen an diesem Helm werden Dich vor jeder Art von ozeanischen Feinden schützen. Gewährt keinen Attributbonus. Abonnentengegenstand, Juli 2018.", - "headMystery201808Text": "Lava Dragon Cowl", - "headMystery201808Notes": "The glowing horns on this cowl will light your way through underground caverns. Confers no benefit. August 2018 Subscriber Item.", - "headMystery201809Text": "Crown of Autumn Flowers", - "headMystery201809Notes": "The last flowers of autumn's warm days are a reminder of the beauty of the season. Confers no benefit. September 2018 Subscriber Item.", - "headMystery201810Text": "Dark Forest Helm", - "headMystery201810Notes": "If you find yourself traveling through a spooky place, the glowing red eyes of this helm will surely scare away any enemies in your path. Confers no benefit. October 2018 Subscriber Item.", + "headMystery201808Text": "Lavadrachen-Haube", + "headMystery201808Notes": "Die leuchtenden Hörner auf dieser Haube erhellen Deinen Weg durch unterirdische Höhlen. Gewährt keinen Attributbonus. Abonnentengegenstand, August 2018.", + "headMystery201809Text": "Herbstblumen-Krone", + "headMystery201809Notes": "Die letzten Blüten der warmen Herbsttage erinnern an die Schönheit der Jahreszeit. Gewährt keinen Attributbonus. Abonnentengegenstand, September 2018.", + "headMystery201810Text": "Dunkelwald-Helm", + "headMystery201810Notes": "Wenn Du Dich auf einer Reise durch einen gruseligen Ort befindest, werden die leuchtend roten Augen dieses Helms sicherlich alle Feinde auf Deinem Weg verscheuchen. Gewährt keinen Attributbonus. Abonnentengegenstand, Oktober 2018.", "headMystery301404Text": "Schicker Zylinder", "headMystery301404Notes": "Ein schicker Zylinder für die feinsten Ehrenleute! Gewährt keinen Attributbonus. Abonnentengegenstand, Januar 3015.", "headMystery301405Text": "Einfacher Zylinder", @@ -1153,7 +1153,7 @@ "headArmoireOrangeCatText": "Orangener Katzenhut", "headArmoireOrangeCatNotes": "Dieser orangene Hut ... schnurrt. Und sein Schwanz zuckt. Und er atmet? Okay, Du hast einfach bloß eine schlafende Katze auf dem Kopf. Erhöht Stärke und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "headArmoireBlueFloppyHatText": "Blauer Schlapphut", - "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Blue Loungewear Set (Item 1 of 3).", + "headArmoireBlueFloppyHatNotes": "Viele Zaubersprüche wurden auf diesen Hut gewirkt, um ihm seine strahlend blaue Farbe zu geben. Erhöht Ausdauer, Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Blaues Loungewear-Set (Gegenstand 1 von 3).", "headArmoireShepherdHeaddressText": "Kopfschmuck des Hirten", "headArmoireShepherdHeaddressNotes": "Manchmal lieben es die Greifen, die Du hütest, auf dieser Kopfbedeckung herumzukauen, aber Du wirkst damit nichtsdestotrotz intelligenter. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Hirten-Set (Gegenstand 3 von 3).", "headArmoireCrystalCrescentHatText": "Kristalliner Mondsichelhut", @@ -1185,7 +1185,7 @@ "headArmoireWoodElfHelmText": "Waldelfenhelm", "headArmoireWoodElfHelmNotes": "Dieser Helm aus Blättern mag zerbrechlich aussehen, aber er schützt Dich vor rauem Wetter und gefährlichen Feinden. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Waldelfenset (Gegenstand 1 von 3).", "headArmoireRamHeaddressText": "Widder-Kopfschmuck", - "headArmoireRamHeaddressNotes": "This elaborate helm is fashioned to look like a ram's head. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Ram Barbarian Set (Item 1 of 3).", + "headArmoireRamHeaddressNotes": "Dieser komplizierte Helm wurde gestaltet, um wie ein Widderkopf auszusehen. Erhöht Ausdauer um <%= con %> und Wahrnehmung um <%= per %>. Verzauberter Schrank: Widder-Barbar Set (Gegenstand 1 von 3).", "headArmoireCrownOfHeartsText": "Herzkrone", "headArmoireCrownOfHeartsNotes": "Diese rosenrote Krone ist nicht nur ein Blickfang! Sie wird auch Dein Herz für schwierige Aufgaben stärken. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Herzkönigin Set (Gegenstand 1 von 3).", "headArmoireMushroomDruidCapText": "Pilz-Druidenkappe", @@ -1199,29 +1199,29 @@ "headArmoireAntiProcrastinationHelmText": "Anti-Aufschieberitis-Helm", "headArmoireAntiProcrastinationHelmNotes": "Dieser mächtige Stahlhelm wird Dir dabei helfen, den Kampf zu gewinnen, um gesund, glücklich und produktiv zu sein! Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Anti-Aufschieberitis-Set (Gegenstand 1 von 3).", "headArmoireCandlestickMakerHatText": "Kerzenmacherhut", - "headArmoireCandlestickMakerHatNotes": "Mit einem flotten Hut macht jeder Job mehr Spaß und die Kerzenmacherei ist da keine Ausnahme! Erhöht Wahrnehmung und Intelligenz jeweils um<%= attrs %>. Verzauberter Schrank (Gegenstand 2 von 3).", + "headArmoireCandlestickMakerHatNotes": "Mit einem flotten Hut macht jeder Job mehr Spaß und die Kerzenmacherei ist da keine Ausnahme! Erhöht Wahrnehmung und Intelligenz jeweils um<%= attrs %>. Verzauberter Schrank: Kerzenmacher-Set (Gegenstand 2 von 3).", "headArmoireLamplightersTopHatText": "Laternenanzünder-Zylinder", - "headArmoireLamplightersTopHatNotes": "This jaunty black hat completes your lamp-lighting ensemble! Increases Constitution by <%= con %>. Enchanted Armoire: Lamplighter's Set (Item 3 of 4).", + "headArmoireLamplightersTopHatNotes": "Dieser flotte, schwarze Hut komplettiert Dein Laternenanzünder-Outfit! Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Laternenanzünder-Set ( Gegenstand 3 von 4).", "headArmoireCoachDriversHatText": "Hut des Kutschers", "headArmoireCoachDriversHatNotes": "Dieser Hut ist elegant, aber nicht ganz so elegant wie ein Zylinder. Verliere ihn nicht auf Deinen schnellen Kutschfahrten durch das Land! Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Kutscherset (Gegenstand 2 von 3).", "headArmoireCrownOfDiamondsText": "Diamantenkrone", - "headArmoireCrownOfDiamondsNotes": "This shining crown isn't just a great hat; it will also sharpen your mind! Increases Intelligence by <%= int %>. Enchanted Armoire: King of Diamonds Set (Item 2 of 4).", + "headArmoireCrownOfDiamondsNotes": "Diese glänzende Krone ist nicht einfach nur eine großartige Kopfbedeckung; sie schärft außerdem auch Deinen Verstand! Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Diamantenkönig-Set (Gegenstand 2 von 4).", "headArmoireFlutteryWigText": "Flatternde Perücke", - "headArmoireFlutteryWigNotes": "This fine powdered wig has plenty of room for your butterflies to rest if they get tired while doing your bidding. Increases Intelligence, Perception, and Strength by <%= attrs %> each. Enchanted Armoire: Fluttery Frock Set (Item 2 of 4).", + "headArmoireFlutteryWigNotes": "Diese fein gepuderte Perücke bietet viel Platz für Deine Schmetterlinge zum Ausruhen, wenn sie müde werden, nachdem sie Deinen Anweisungen gefolgt sind. Erhöht Intelligenz, Wahrnehmung und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Flatterndes Frack-Set (Gegenstand 2 von 4).", "headArmoireBirdsNestText": "Vogelnest", "headArmoireBirdsNestNotes": "Wenn Du merkst, dass sich etwas rührt und Du Tschilpen hörst, könnte es sein, dass Du in Deinem neuen Hut neue Freunde ausgebrütet hast. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "headArmoirePaperBagText": "Papiertüte", - "headArmoirePaperBagNotes": "This bag is a hilarious but surprisingly protective helm (don't worry, we know you look good under there!). Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.", - "headArmoireBigWigText": "Big Wig", - "headArmoireBigWigNotes": "Some powdered wigs are for looking more authoritative, but this one is just for laughs! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", - "headArmoireGlassblowersHatText": "Glassblower's Hat", - "headArmoireGlassblowersHatNotes": "This hat mainly just looks good with your other protective glassblowing gear! Increases Perception by <%= per %>. Enchanted Armoire: Glassblower Set (Item 3 of 4).", - "headArmoirePiraticalPrincessHeaddressText": "Piratical Princess Headdress", - "headArmoirePiraticalPrincessHeaddressNotes": "Fancy buccaneers are known for their fancy headwear! Increases Perception and Intelligence by <%= attrs %> each. Enchanted Armoire: Piratical Princess Set (Item 1 of 4).", - "headArmoireJeweledArcherHelmText": "Jeweled Archer Helm", - "headArmoireJeweledArcherHelmNotes": "This helm may look ornate, but it's also exceedingly light and strong. Increases Intelligence by <%= int %>. Enchanted Armoire: Jeweled Archer Set (Item 1 of 3).", - "headArmoireVeilOfSpadesText": "Veil of Spades", - "headArmoireVeilOfSpadesNotes": "A shadowy and mysterious veil that will boost your stealth. Increases Perception by <%= per %>. Enchanted Armoire: Ace of Spades Set (Item 1 of 3).", + "headArmoirePaperBagNotes": "Diese Tasche ist ein urkomischer, aber überraschend schützender Helm. (Keine Sorge, wir wissen, dass Du darunter gut aussiehst!) Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Unabhängiger Gegenstand.", + "headArmoireBigWigText": "Riesige Perücke", + "headArmoireBigWigNotes": "Einige gepuderte Perücken sind dafür gedacht, autoritärer auszusehen, aber diese hier ist nur zum Lachen! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Unabhängiger Gegenstand.", + "headArmoireGlassblowersHatText": "Glasbläser-Hut", + "headArmoireGlassblowersHatNotes": "Dieser Hut sieht einfach gut aus mit Deiner Glasbläser-Schutzausrüstung! Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Glasbläser-Set (Gegenstand 3 von 4).", + "headArmoirePiraticalPrincessHeaddressText": "Piratiger Prinzessinnen-Kopfschmuck", + "headArmoirePiraticalPrincessHeaddressNotes": "Ausgefallene Seeräuber sind bekannt für ihre ausgefallene Kopfbedeckung! Erhöht Wahrnehmung und Intelligenz jeweils um <%= attrs %>. Verzauberter Schrank: Piratiges Prinzessinnen-Set (Gegenstand 1 von 4).", + "headArmoireJeweledArcherHelmText": "Juwelenbesetzter Bogenschützen-Helm", + "headArmoireJeweledArcherHelmNotes": "Dieser Helm mag kunstvoll aussehen, ist aber auch äußerst leicht und stark. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Juwelenbesetztes Bogenschützen-Set (Gegenstand 1 von 3).", + "headArmoireVeilOfSpadesText": "Pik-Schleier", + "headArmoireVeilOfSpadesNotes": "Ein schattiger und mysteriöser Schleier, der Deine Tarnung verstärken wird. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Pik-Ass-Set (Gegenstand 1 von 3).", "offhand": "Schildhand-Gegenstand", "offhandCapitalized": "Schildhand-Gegenstand", "shieldBase0Text": "Keine Schildhand-Ausrüstung.", @@ -1249,9 +1249,9 @@ "shieldSpecial0Text": "Gequälter Totenschädel", "shieldSpecial0Notes": "Sieht hinter den Vorhang des Todes und zeigt Feinden das, was es dort findet, um sie das Fürchten zu lehren. Erhöht Wahrnehmung um <%= per %>.", "shieldSpecial1Text": "Kristallschild", - "shieldSpecial1Notes": "Shatters arrows and deflects the words of naysayers. Increases all Stats by <%= attrs %>.", + "shieldSpecial1Notes": "Zerschmettert Pfeile und lenkt die Worte von Neinsagern ab. Erhöht alle Attribute um <%= attrs %>.", "shieldSpecialTakeThisText": "Take This-Schild", - "shieldSpecialTakeThisNotes": "This shield was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", + "shieldSpecialTakeThisNotes": "Dieser Schild wurde durch die Teilnahme an einem von Take This gesponserten Wettbewerb verdient. Glückwunsch! Erhöht alle Attribute um <%= attrs %>.", "shieldSpecialGoldenknightText": "Mustaines Meilenstein-matschender Morgenstern", "shieldSpecialGoldenknightNotes": "Konferenzen, Kreaturen, Krankheit: Alles erledigt! Zerstampft! Erhöht Ausdauer und Wahrnehmung jeweils um <%= attrs %>.", "shieldSpecialMoonpearlShieldText": "Mondperlenschild", @@ -1363,25 +1363,25 @@ "shieldSpecialFall2017HealerText": "Herumgeisternde Kugel", "shieldSpecialFall2017HealerNotes": "Diese Kugel kreischt gelegentlich. Es tut uns leid, aber wir wissen nicht warum. Jedenfalls sieht sie schick aus! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2017 Herbstausrüstung.", "shieldSpecialWinter2018RogueText": "Pfefferminz-Haken", - "shieldSpecialWinter2018RogueNotes": "Perfect for climbing walls or distracting your foes with sweet, sweet candy. Increases Strength by <%= str %>. Limited Edition 2017-2018 Winter Gear.", + "shieldSpecialWinter2018RogueNotes": "Perfekt geeignet, um Wände zu erklimmen oder um deine Gegner mit zuckersüßen Süßigkeiten abzulenken. Erhöht Stärke um<%= str %>. Limitierte Ausgabe 2017-2018 Winterausrüstung.", "shieldSpecialWinter2018WarriorText": "Magische Geschenktüte", - "shieldSpecialWinter2018WarriorNotes": "Just about any useful thing you need can be found in this sack, if you know the right magic words to whisper. Increases Constitution by <%= con %>. Limited Edition 2017-2018 Winter Gear.", + "shieldSpecialWinter2018WarriorNotes": "In diesem Sack findet sich so ziemlich jedes nützliche Ding, das Du brauchst, wenn Du die richtigen Zauberworte zum Flüstern kennst. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2017-2018 Winterausrüstung.", "shieldSpecialWinter2018HealerText": "Mistelzweigglocke", - "shieldSpecialWinter2018HealerNotes": "What's that sound? The sound of warmth and cheer for all to hear! Increases Constitution by <%= con %>. Limited Edition 2017-2018 Winter Gear.", + "shieldSpecialWinter2018HealerNotes": "Was ist das für ein Geräusch? Der Klang von Wärme und Jubel für alle zu hören! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2017-2018 Winterausrüstung.", "shieldSpecialSpring2018WarriorText": "Morgenschild", "shieldSpecialSpring2018WarriorNotes": "Dieser stabile Schild glüht im Glanz des ersten Tageslichts. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2018 Frühlingsausrüstung.", "shieldSpecialSpring2018HealerText": "Granatschild", "shieldSpecialSpring2018HealerNotes": "Trotz seines kunstvollen Aussehens ist dieser Granatschild sehr widerstandsfähig! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2018 Frühlingsausrüstung.", - "shieldSpecialSummer2018WarriorText": "Betta Skull Shield", - "shieldSpecialSummer2018WarriorNotes": "Fashioned from stone, this fearsome skull-styled shield strikes fear into fish foes while rallying your Skeleton pets and mounts. Increases Constitution by <%= con %>. Limited Edition 2018 Summer Gear.", - "shieldSpecialSummer2018HealerText": "Merfolk Monarch Emblem", - "shieldSpecialSummer2018HealerNotes": "This shield can produce a dome of air for the benefit of land-dwelling visitors to your watery realm. Increases Constitution by <%= con %>. Limited Edition 2018 Summer Gear.", - "shieldSpecialFall2018RogueText": "Vial of Temptation", - "shieldSpecialFall2018RogueNotes": "This bottle represents all the distractions and troubles that keep you from being your best self. Resist! We're cheering for you! Increases Strength by <%= str %>. Limited Edition 2018 Autumn Gear.", - "shieldSpecialFall2018WarriorText": "Brilliant Shield", - "shieldSpecialFall2018WarriorNotes": "Super shiny to dissuade any troublesome Gorgons from playing peek-a-boo around the corners! Increases Constitution by <%= con %>. Limited Edition 2018 Autumn Gear.", - "shieldSpecialFall2018HealerText": "Hungry Shield", - "shieldSpecialFall2018HealerNotes": "With its wide-open maw, this shield will absorb all your enemies' blows. Increases Constitution by <%= con %>. Limited Edition 2018 Autumn Gear.", + "shieldSpecialSummer2018WarriorText": "Kampffisch-Schädelhaube", + "shieldSpecialSummer2018WarriorNotes": "Aus Stein gefertigt, verbreitet dieser Schild im Schädel-Stil Angst unter Fisch-Feinden und trommelt Deine Skelett-Haus- und Reittiere zusammen. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2018 Sommerausrüstung.", + "shieldSpecialSummer2018HealerText": "Meervolk-Monarchen-Emblem", + "shieldSpecialSummer2018HealerNotes": "Dieser Schild kann eine Luftkuppel zum Wohle der landlebenden Besucher Deines wässrigen Reiches erzeugen. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2018 Sommerausrüstung.", + "shieldSpecialFall2018RogueText": "Ampulle der Versuchung", + "shieldSpecialFall2018RogueNotes": "Diese Flasche repräsentiert all die Ablenkungen und Probleme, die Dich davon abhalten, Dein bestes Selbst zu sein. Widerstehe! Wir feuern Dich an! Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2018 Herbstausrüstung.", + "shieldSpecialFall2018WarriorText": "Glänzender Schild", + "shieldSpecialFall2018WarriorNotes": "Super glänzend, um lästige Gorgonen davon abzuhalten, um die Ecke zu schauen! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2018 Herbstausrüstung.", + "shieldSpecialFall2018HealerText": "Hungriger Schild", + "shieldSpecialFall2018HealerNotes": "Mit seinem weit geöffneten Schlund absorbiert dieser Schild die Schläge all Deiner Feinde. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2018 Herbstausrüstung.", "shieldMystery201601Text": "Töter der Vorsätze", "shieldMystery201601Notes": "Diese Klinge kann zur Entfernung aller Ablenkungen verwendet werden. Gewährt keinen Attributbonus. Abonnentengegenstand, Januar 2016.", "shieldMystery201701Text": "Zeitanhalterschild", @@ -1413,7 +1413,7 @@ "shieldArmoirePerchingFalconText": "Sitzender Falke", "shieldArmoirePerchingFalconNotes": "Ein Falke sitzt auf Deinem Arm, bereit sich auf Deine Feinde zu stürzen. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Falkner Set (Gegenstand 3 von 3).", "shieldArmoireRamHornShieldText": "Widderhornschild", - "shieldArmoireRamHornShieldNotes": "Ram this shield into opposing Dailies! Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Ram Barbarian Set (Item 3 of 3).", + "shieldArmoireRamHornShieldNotes": "Ramme diesen Schild in feindliche Tägliche Aufgaben! Erhöht Ausdauer und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Widder-Barbar Set (Gegenstand 3 von 3).", "shieldArmoireRedRoseText": "Rote Rose", "shieldArmoireRedRoseNotes": "Diese rote Rose riecht bezaubernd. Sie wird außerdem Deinen Verstand schärfen. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "shieldArmoireMushroomDruidShieldText": "Pilzdruiden-Schild", @@ -1431,28 +1431,28 @@ "shieldArmoireHorseshoeText": "Hufeisen", "shieldArmoireHorseshoeNotes": "Schütze die Hufe Deiner Reittiere mit diesem Hufeisen. Erhöht Ausdauer, Wahrnehmung und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Hufschmiedset (Gegenstand 3 von 3).", "shieldArmoireHandmadeCandlestickText": "Handgearbeitete Kerze", - "shieldArmoireHandmadeCandlestickNotes": "Deine feinen Wachswaren spenden den dankbaren Habiticanern Licht und Wärme! Erhöht Stärke um <%= str %>. Verzauberter Schrank (Gegenstand 3 von 3).", + "shieldArmoireHandmadeCandlestickNotes": "Deine feinen Wachswaren spenden den dankbaren Habiticanern Licht und Wärme! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Kerzenmacher-Set (Gegenstand 3 von 3).", "shieldArmoireWeaversShuttleText": "Schiffchen des Webers", "shieldArmoireWeaversShuttleNotes": "Dieses Werkzeug führt Deinen Schussfaden durch die Kette, um Stoff zu fertigen! Erhöht Intelligenz um <%= int %> und Wahrnehmung um <%= per %>. Verzauberter Schrank: Weber-Set (Gegenstand 3 von 3).", - "shieldArmoireShieldOfDiamondsText": "Shield of Diamonds", - "shieldArmoireShieldOfDiamondsNotes": "This radiant shield not only provides protection, it empowers you with endurance! Increases Constitution by <%= con %>. Enchanted Armoire: King of Diamonds Set (Item 4 of 4).", - "shieldArmoireFlutteryFanText": "Fluttery Fan", - "shieldArmoireFlutteryFanNotes": "On a hot day, there's nothing quite like a fancy fan to help you look and feel cool. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Fluttery Frock Set (Item 4 of 4).", - "shieldArmoireFancyShoeText": "Fancy Shoe", - "shieldArmoireFancyShoeNotes": "A very special shoe you're working on. It's fit for royalty! Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 3 of 3).", - "shieldArmoireFancyBlownGlassVaseText": "Fancy Blown Glass Vase", - "shieldArmoireFancyBlownGlassVaseNotes": "What a fancy vase you've made! What will you put inside? Increases Intelligence by <%= int %>. Enchanted Armoire: Glassblower Set (Item 4 of 4).", - "shieldArmoirePiraticalSkullShieldText": "Piratical Skull Shield", - "shieldArmoirePiraticalSkullShieldNotes": "This enchanted shield will whisper the secret locations of your enemies' treasures- listen closely! Increases Perception and Intelligence by <%= attrs %> each. Enchanted Armoire: Piratical Princess Set (Item 4 of 4).", - "shieldArmoireUnfinishedTomeText": "Unfinished Tome", - "shieldArmoireUnfinishedTomeNotes": "You simply can't procrastinate when you're holding this! The binding needs to be finished so people can read the book! Increases Intelligence by <%= int %>. Enchanted Armoire: Bookbinder Set (Item 4 of 4).", - "shieldArmoireSoftBluePillowText": "Soft Blue Pillow", - "shieldArmoireSoftBluePillowNotes": "The sensible warrior packs a pillow for any expedition. Shield yourself from sharp tasks... even while you nap. Increases Constitution by <%= con %>. Enchanted Armoire: Blue Loungewear Set (Item 3 of 3).", + "shieldArmoireShieldOfDiamondsText": "Karo-Schild", + "shieldArmoireShieldOfDiamondsNotes": "Dieser strahlende Schild bietet nicht nur Schutz, sondern macht Dich auch ausdauernd! Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Diamantenkönig-Set (Gegenstand 4 von 4).", + "shieldArmoireFlutteryFanText": "Flatterfächer", + "shieldArmoireFlutteryFanNotes": "An einem heißen Tag geht nichts über einen schicken Fächer, der Dich nicht ins Schwitzen kommen lässt. Erhöht Ausdauer, Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Flatterndes Frack-Set (Gegenstand 4 von 4).", + "shieldArmoireFancyShoeText": "Schicker Schuh", + "shieldArmoireFancyShoeNotes": "Ein ganz besonderer Schuh, an dem Du arbeitest. Er ist eines Königs würdig! Erhöht Intelligenz und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Schuster-Set (Gegenstand 3 von 3).", + "shieldArmoireFancyBlownGlassVaseText": "Schicke mundgeblasene Vase", + "shieldArmoireFancyBlownGlassVaseNotes": "Was für eine schicke Vase hast Du da gemacht! Was wirst Du da rein tun? Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Glasbläser-Set (Gegenstand 4 von 4).", + "shieldArmoirePiraticalSkullShieldText": "Piratige Schädelhaube", + "shieldArmoirePiraticalSkullShieldNotes": "Dieser verzauberte Schild wird die geheimen Orte der Schätze Deiner Feinde flüstern - hör genau hin! Erhöht Wahrnehmung und Intelligenz jeweils um <%= attrs %>. Verzauberter Schrank: Piratiges Prinzessinnen-Set (Gegenstand 4 von 4).", + "shieldArmoireUnfinishedTomeText": "Unfertiger Foliant", + "shieldArmoireUnfinishedTomeNotes": "Du kannst einfach nichts aufschieben, wenn Du das hier hältst! Die Bindung muss fertig gestellt werden, damit die Leute das Buch lesen können! Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Buchbinder-Set (Gegenstand 4 von 4).", + "shieldArmoireSoftBluePillowText": "Weiches Blaues Kissen", + "shieldArmoireSoftBluePillowNotes": "Der vernünftige Krieger packt ein Kissen für jede Expedition ein. Schütze Dich vor scharfen Aufgaben.... sogar während Du schläfst. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Blaues Loungewear-Set (Gegenstand 3 von 3).", "back": "Rückenschmuck", "backCapitalized": "Rückenaccessoire", "backBase0Text": "Kein Rückenschmuck", "backBase0Notes": "Kein Rückenschmuck.", - "animalTails": "Animal Tails", + "animalTails": "Tierschwänze", "backMystery201402Text": "Güldene Flügel", "backMystery201402Notes": "Die Federn dieser leuchtenden Flügel glitzern in der Sonne! Gewährt keinen Attributbonus. Abonnentengegenstand, Februar 2014.", "backMystery201404Text": "Schmetterlingsflügel des Zwielichts", @@ -1490,29 +1490,29 @@ "backSpecialWonderconBlackText": "Tückischer Umhang", "backSpecialWonderconBlackNotes": "Gewebt aus Schatten und Geflüster. Gewährt keinen Attributbonus. Special Edition Convention-Gegenstand.", "backSpecialTakeThisText": "Take This-Flügel", - "backSpecialTakeThisNotes": "These wings were earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", + "backSpecialTakeThisNotes": "Diese Flügel wurden durch die Teilnahme an einem von Take This gesponsorten Wettbewerb verdient. Gratulation! Erhöht alle Attribute um <%= attrs %>.", "backSpecialSnowdriftVeilText": "Schneewehen-Schleier", "backSpecialSnowdriftVeilNotes": "Dieser durchscheinende Schleier sieht aus, als hättest Du Dich in ein elegantes Schneegestöber gehüllt. Gewährt keinen Attributbonus.", "backSpecialAetherCloakText": "Äthermantel", "backSpecialAetherCloakNotes": "Dieser Umhang gehörte einst der Verschwundenen Klassenmeisterin höchstselbst. Erhöht Wahrnehmung um <%= per %>.", "backSpecialTurkeyTailBaseText": "Truthahnschwanz", - "backSpecialTurkeyTailBaseNotes": "Wear your noble Turkey Tail with pride while you celebrate! Confers no benefit.", - "backBearTailText": "Bear Tail", - "backBearTailNotes": "This tail makes you look like a brave bear! Confers no benefit.", - "backCactusTailText": "Cactus Tail", - "backCactusTailNotes": "This tail makes you look like a prickly cactus! Confers no benefit.", - "backFoxTailText": "Fox Tail", - "backFoxTailNotes": "This tail makes you look like a wily fox! Confers no benefit.", - "backLionTailText": "Lion Tail", - "backLionTailNotes": "This tail makes you look like a regal lion! Confers no benefit.", - "backPandaTailText": "Panda Tail", - "backPandaTailNotes": "This tail makes you look like a gentle panda! Confers no benefit.", - "backPigTailText": "Pig Tail", - "backPigTailNotes": "This tail makes you look like a whimsical pig! Confers no benefit.", - "backTigerTailText": "Tiger Tail", - "backTigerTailNotes": "This tail makes you look like a fierce tiger! Confers no benefit.", - "backWolfTailText": "Wolf Tail", - "backWolfTailNotes": "This tail makes you look like a loyal wolf! Confers no benefit.", + "backSpecialTurkeyTailBaseNotes": "Trage Deinen edlen Truthahn-Schwanz mit Stolz, während Du feierst! Gewährt keinen Attributbonus.", + "backBearTailText": "Bärenschwanz", + "backBearTailNotes": "Dieser Schwanz verleiht Dir das Aussehen eines tapferen Bären! Gewährt keinen Attributbonus.", + "backCactusTailText": "Kaktusschwanz", + "backCactusTailNotes": "Dieser Schwanz verleiht Dir das Aussehen eines stacheligen Kaktus! Gewährt keinen Attributbonus.", + "backFoxTailText": "Fuchsschwanz", + "backFoxTailNotes": "Dieser Schwanz verleiht Dir das Aussehen eines listigen Fuchses! Gewährt keinen Attributbonus. ", + "backLionTailText": "Löwenschwanz", + "backLionTailNotes": "Dieser Schwanz verleiht Dir das Aussehen eines königlichen Löwen! Gewährt keinen Attributbonus.", + "backPandaTailText": "Pandaschwanz", + "backPandaTailNotes": "Dieser Schwanz verleiht Dir das Aussehen eines sanftmütigen Pandas! Gewährt keinen Attributbonus.", + "backPigTailText": "Schweineschanz", + "backPigTailNotes": "Dieser Schwanz verleiht Dir das Aussehen eines drolligen Schweinchens! Gewährt keinen Attributbonus.", + "backTigerTailText": "Tigerschwanz", + "backTigerTailNotes": "Dieser Schwanz verleiht Dir das Aussehen eines wilden Tigers! Gewährt keinen Attributbonus.", + "backWolfTailText": "Wolfsschwanz", + "backWolfTailNotes": "Dieser Schwanz verleiht Dir das Aussehen eines loyalen Wolfes! Gewährt keinen Attributbonus.", "body": "Körperaccessoire", "bodyCapitalized": "Rückenaccessoire", "bodyBase0Text": "Kein Kleidungsschmuck", @@ -1524,7 +1524,7 @@ "bodySpecialWonderconBlackText": "Ebenholzkragen", "bodySpecialWonderconBlackNotes": "Ein fescher Ebenholzkragen! Gewährt keinen Attributbonus. Special Edition Convention-Gegenstand.", "bodySpecialTakeThisText": "Take This-Vorderflüge", - "bodySpecialTakeThisNotes": "These pauldrons were earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", + "bodySpecialTakeThisNotes": "Diese Vorderflüge wurden durch die Teilnahme an einem von Take This gesponsorten Wettbewerb verdient. Gratulation! Erhöht alle Attribute um <%= attrs %>.", "bodySpecialAetherAmuletText": "Ätheramulett", "bodySpecialAetherAmuletNotes": "Dieses Amulett hat eine mysteriöse Geschichte. Erhöht Ausdauer und Stärke um jeweils <%= attrs %>.", "bodySpecialSummerMageText": "Glänzender Kurzumhang", @@ -1539,8 +1539,8 @@ "bodySpecialSummer2015MageNotes": "Diese Schnalle besitzt überhaupt keine Stärke, aber sie glänzt! Gewährt keinen Attributbonus. Limitierte Ausgabe 2015 Sommerausrüstung.", "bodySpecialSummer2015HealerText": "Matrosenhalstuch", "bodySpecialSummer2015HealerNotes": "Yo ho ho? No, no, no! Gewährt keinen Attributbonus. Limitierte Ausgabe 2015 Sommerausrüstung.", - "bodySpecialNamingDay2018Text": "Royal Purple Gryphon Cloak", - "bodySpecialNamingDay2018Notes": "Happy Naming Day! Wear this fancy and feathery cloak as you celebrate Habitica. Confers no benefit.", + "bodySpecialNamingDay2018Text": "Königlicher purpurfarbener Greifenumhang", + "bodySpecialNamingDay2018Notes": "Alles Liebe zum Namenstag! Trage diesen ausgefallenen und fedrigen Umhang, während Du Habitica feierst. Gewährt keinen Attributbonus.", "bodyMystery201705Text": "Gefaltete gefiederte Kämpfer-Flügel", "bodyMystery201705Notes": "Diese eingefalteten Flügel sehen nicht nur fesch aus: sie geben Dir die Schnelligkeit und Wendigkeit eines Greifs! Gewährt keinen Attributbonus. Abonnentengegenstand, Mai 2017.", "bodyMystery201706Text": "Zerlumpter Korsarenumhang", @@ -1548,7 +1548,7 @@ "bodyMystery201711Text": "Teppichreiterschal", "bodyMystery201711Notes": "Dieser weiche Schal sieht sehr majestätisch aus wenn er sich leicht im Wind bewegt. Gewährt keinen Attributbonus. Abonnentengegenstand, November 2017.", "bodyArmoireCozyScarfText": "Gemütlicher Schal", - "bodyArmoireCozyScarfNotes": "This fine scarf will keep you warm as you go about your wintry business. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Lamplighter's Set (Item 4 of 4).", + "bodyArmoireCozyScarfNotes": "Dieser feine Schal hält Dich warm, während Du Deinen winterlichen nachgehst. Erhöht Ausdauer und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Laternenanzünder-Set ( Gegenstand 4 von 4).", "headAccessory": "Kopfschmuck", "headAccessoryCapitalized": "Kopfschmuck", "accessories": "Accessoires", @@ -1634,9 +1634,9 @@ "headAccessoryMystery301405Text": "Kopf-Brille", "headAccessoryMystery301405Notes": "\"Brillen sind für die Augen,\" haben sie gesagt. \"Niemand will Brillen, die man nur auf dem Kopf tragen kann,\" haben sie gesagt. Ha! Da hast Du es ihnen aber ordentlich gezeigt! Gewährt keinen Attributbonus. Abonnentengegenstand, August 3015.", "headAccessoryArmoireComicalArrowText": "Komischer Pfeil", - "headAccessoryArmoireComicalArrowNotes": "This whimsical item sure is good for a laugh! Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", - "headAccessoryArmoireGogglesOfBookbindingText": "Goggles of Bookbinding", - "headAccessoryArmoireGogglesOfBookbindingNotes": "These goggles will help you zero in on any task, large or small! Increases Perception by <%= per %>. Enchanted Armoire: Bookbinder Set (Item 1 of 4).", + "headAccessoryArmoireComicalArrowNotes": "Dieser wunderliche Gegenstand ist wirklich gut zum Lachen! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Unabhängiger Gegenstand.", + "headAccessoryArmoireGogglesOfBookbindingText": "Brille der Buchbinderei", + "headAccessoryArmoireGogglesOfBookbindingNotes": "Diese Brille hilft Dir, Dich auf jede Aufgabe einzuschießen, ob groß oder klein! Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Buchbinder-Set (Gegenstand 1 von 4).", "eyewear": "Brillen", "eyewearCapitalized": "Brillen & Masken", "eyewearBase0Text": "Keine Brille", diff --git a/website/common/locales/de/generic.json b/website/common/locales/de/generic.json index 8ae8a32a1f..f538c355bd 100644 --- a/website/common/locales/de/generic.json +++ b/website/common/locales/de/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Benutzer-ID wird benötigt", "resetFilters": "Alle Filter zurücksetzen", "applyFilters": "Filter anwenden", + "wantToWorkOn": "I want to work on:", "categories": "Kategorien", "habiticaOfficial": "Habitica offiziell", "animals": "Tiere", diff --git a/website/common/locales/de/groups.json b/website/common/locales/de/groups.json index 3ad92d15eb..6ebd157ba7 100644 --- a/website/common/locales/de/groups.json +++ b/website/common/locales/de/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Bestehende Benutzer einladen", "byColon": "Von:", "inviteNewUsers": "Neue Nutzer einladen", - "sendInvitations": "Einladungen verschicken", + "sendInvitations": "Send Invites", "invitationsSent": "Einladungen verschickt!", "invitationSent": "Einladung verschickt!", "invitedFriend": "Hat einen Freund eingeladen", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Du kannst Dich nicht selbst entfernen!", "groupMemberNotFound": "Benutzer nicht unter den Team-Mitgliedern gefunden", "mustBeGroupMember": "Muss ein Mitglied des Teams sein.", - "canOnlyInviteEmailUuid": "Es kann nur mittels UUID oder E-Mail eingeladen werden.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Fehlende E-Mail-Adresse zum Einladen.", "inviteMissingUuid": "User-ID in der Einladung fehlt", "inviteMustNotBeEmpty": "Einladung muss Daten enthalten", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "Nutzer-ID: <%= userId %>, Nutzer \"<%= username %>\" hat bereits eine ausstehende Einladung.", "userAlreadyInAParty": "Nutzer-ID: <%= userId %>, Nutzer \"<%= username %>\" ist bereits in einer Gruppe.", "userWithIDNotFound": "Benutzer mit ID \"<%= userId %>\" nicht gefunden", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Benutzer ist lokal nicht registriert (Benutzername, E-Mail, Passwort).", "uuidsMustBeAnArray": "Benutzer-ID-Einladungen müssen ein Array sein.", "emailsMustBeAnArray": "E-Mail-Adress-Einladungen müssen ein Array sein.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Du kannst nur \"<%= maxInvites %>\" Benutzer gleichzeitig einladen", "partyExceedsMembersLimit": "Die Gruppengröße ist begrenzt auf <%= maxMembersParty %> Mitglieder", "onlyCreatorOrAdminCanDeleteChat": "Löschen der Nachricht nicht erlaubt!", @@ -361,6 +363,10 @@ "liked": "Liked", "joinGuild": "Der Gilde Beitreten", "inviteToGuild": "In Gilde Einladen", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Gildenleiter Benachrichtigen", "donateGems": "Edelsteine Spenden", "updateGuild": "Gilde Aktualisieren", diff --git a/website/common/locales/de/limited.json b/website/common/locales/de/limited.json index db801feb5f..04e19fdbcf 100644 --- a/website/common/locales/de/limited.json +++ b/website/common/locales/de/limited.json @@ -127,7 +127,7 @@ "summer2018MerfolkMonarchSet": "Meervolk-Monarch (Heiler)", "summer2018FisherRogueSet": "Fischdieb (Schurke)", "fall2018MinotaurWarriorSet": "Minotaurus (Krieger)", - "fall2018CandymancerMageSet": "Süssigkeitenbeschwörer (Magier)", + "fall2018CandymancerMageSet": "Süßigkeitenbeschwörer (Magier)", "fall2018CarnivorousPlantSet": "Fleischfressende Pflanze (Heiler)", "fall2018AlterEgoSet": "Alter Ego (Schurke)", "eventAvailability": "Zum Kauf verfügbar bis zum <%= date(locale) %>.", diff --git a/website/common/locales/de/messages.json b/website/common/locales/de/messages.json index 9b46a61f2b..cdfcdd0424 100644 --- a/website/common/locales/de/messages.json +++ b/website/common/locales/de/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Mitteilungs-IDs werden benötigt.", "unallocatedStatsPoints": "Du kannst <%= points %> Attributpunkt(e) verteilen", "beginningOfConversation": "Dies ist der Anfang Deiner Unterhaltung mit<%= userName %>. Denke an einen freundlichen und respektvollen Umgang und halte Dich an die Community-Richtlinien!", - "messageDeletedUser": "Tut uns leid, dieser Benutzer hat sein Konto gelöscht." + "messageDeletedUser": "Tut uns leid, dieser Benutzer hat sein Konto gelöscht.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/de/npc.json b/website/common/locales/de/npc.json index 88e982e585..35beeba55e 100644 --- a/website/common/locales/de/npc.json +++ b/website/common/locales/de/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Willkommen in ", "welcomeBack": "Willkommen zurück!", "justin": "Justin", - "justinIntroMessage1": "Hallo! Du musst neu hier sein. Mein Name ist Justin, ich bin Dein Reiseführer durch Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Um zu beginnen, erstelle einen Avatar.", "justinIntroMessage3": "Großartig! Woran möchtest Du auf dieser Reise arbeiten?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Los geht's! Basierend auf Deinen Interessen, habe ich Dir ein paar Aufgaben erstellt, damit Du gleich loslegen kannst. Klicke auf eine Aufgabe um sie zu bearbeiten oder erstelle neue Aufgaben, wie Du sie brauchst!", "prev": "Zurück", "next": "Vor", diff --git a/website/common/locales/de/questscontent.json b/website/common/locales/de/questscontent.json index f0e2d3db97..70c1667e51 100644 --- a/website/common/locales/de/questscontent.json +++ b/website/common/locales/de/questscontent.json @@ -102,7 +102,7 @@ "questGoldenknight2Text": "Die goldene Ritterin, Teil 2: Goldene Ritterin", "questGoldenknight2Notes": "Mit hunderten Zeugenaussagen von Habiticanern bewaffnet, konfrontierst Du die goldene Ritterin. Du fängst an, ihr die Beschwerden der Habiticaner eine nach der anderen vorzulesen. \"Und @Pfeffernusse sagt, dass Deine ständige Prahlerei-\" Die Ritterin hebt ihre Hand, um Dich zum Schweigen zu bringen und spottet \"Ich bitte Dich, diese Leute sind einfach nur neidisch auf meinen Erfolg. Statt sich zu beschweren, sollten sie einfach so hart arbeiten wie ich! Vielleicht zeige ich Dir mal, wie stark Du werden kannst, wenn Du so fleißig bist wie ich!\" Sie hebt ihren Morgenstern und setzt zum Angriff an!", "questGoldenknight2Boss": "Goldene Ritterin", - "questGoldenknight2Completion": "The Golden Knight lowers her Morningstar in consternation. “I apologize for my rash outburst,” she says. “The truth is, it’s painful to think that I’ve been inadvertently hurting others, and it made me lash out in defense… but perhaps I can still apologize?”", + "questGoldenknight2Completion": "Die Goldene Ritterin senkt bestürzt ihren Morgenstern. \"Ich entschuldige mich für meinen überstürzten Ausbruch\", sagt sie. \"Es schmerzte mich, dass ich versehentlich andere verletzt habe, und das hat mich dazu gebracht, zur Verteidigung um mich zu schlagen... aber vielleicht kann ich mich noch entschuldigen?\"", "questGoldenknight2DropGoldenknight3Quest": "Die goldene Ritterin, Teil 3: Der eiserne Ritter (Schriftrolle)", "questGoldenknight3Text": "Die goldene Ritterin, Teil 3: Der eiserne Ritter", "questGoldenknight3Notes": "@Jon Arinbjorn schreit laut auf, um Deine Aufmerksamkeit zu erlangen. Nach Deiner Schlacht ist eine neue Figur aufgetaucht. Ein Ritter, gerüstet in schwarz geflecktem Eisen, kommt Dir langsam mit einem Schwert in der Hand entgegen. Die goldene Ritterin ruft ihm zu: \"Vater, nein!\" Aber der Ritter zeigt keinerlei Anzeichen anzuhalten. Sie wendet sich an Dich: \"Es tut mir Leid. Ich war ein Narr und zu stolz zu erkennen, wie grausam ich war. Aber mein Vater ist noch viel grausamer als ich es je sein könnte. Wenn er nicht aufgehalten wird, dann wird er uns alle vernichten. Hier, nimm meinen Morgenstern und halte den eisernen Ritter auf!\"", @@ -148,9 +148,9 @@ "questAtom2Notes": "Puh, der See sieht schon viel besser aus mit dem sauberen Geschirr. Vielleicht kannst Du Dir jetzt endlich etwas Spaß gönnen. Oh - es scheint, da schwimmt eine Pizzaschachtel auf dem See. Naja, was ist schon eine Sache mehr oder weniger aufzuräumen? Aber, ach je, das ist kein gewöhnlicher Pizzakarton! Mit einem plötzlichen Wasserschwall erhebt sich die Schachtel aus dem Wasser und gibt sich als Kopf eines Monsters zu erkennen. Das kann nicht sein! Das Fabelwesen von KochLess!? Es soll schon seit prähistorischen Zeiten im See versteckt leben: eine Kreatur hervorgebracht aus Speiseresten und Müll der altertümlichen Habiticanern. Igitt!", "questAtom2Boss": "Das Monster vom KochLess", "questAtom2Drop": "Der Wäschebeschwörer (Schriftrolle)", - "questAtom2Completion": "With a deafening cry, and five delicious types of cheese bursting from its mouth, the Snackless Monster falls to pieces. Well done, brave adventurer! But wait... is there something else wrong with the lake?", + "questAtom2Completion": "Mit einem ohrenbetäubenden Schrei und fünf köstlichen Käsesorten, die aus dem Mund purzeln, zerfällt das Monster von KochLess in Stücke. Gut gemacht, tapferer Abenteurer! Aber warte.... stimmt da noch etwas anderes nicht mit dem See?", "questAtom3Text": "Angriff des Banalen, Teil 3: Der Wäschebeschwörer", - "questAtom3Notes": "Just when you thought that your trials had ended, Washed-Up Lake begins to froth violently. “HOW DARE YOU!” booms a voice from beneath the water's surface. A robed, blue figure emerges from the water, wielding a magic toilet brush. Filthy laundry begins to bubble up to the surface of the lake. \"I am the Laundromancer!\" he angrily announces. \"You have some nerve - washing my delightfully dirty dishes, destroying my pet, and entering my domain with such clean clothes. Prepare to feel the soggy wrath of my anti-laundry magic!\"", + "questAtom3Notes": "Gerade als Du dachtest, dass Deine Prüfungen vorbei wären, beginnt der Waschbeckensee heftig zu schäumen. \"DU WAGST ES!?\" dröhnt eine Stimme von unter dem See. Eine blaue Gestalt, erhebt sich in eine Robe gekleidet aus dem Wasser und schwingt eine magische Toilettenbürste. Schmutzige Wäsche beginnt im See aufzusteigen. \"Ich bin der Wäschebeschwörer!\" verkündet die Gestalt ärgerlich. \"Was erlaubst Du Dir - einfach so mein wunderbar schmutziges Geschirr abzuspülen, mein Haustier zu verscheuchen und mein Reich mit solch sauberer Kleidung zu betreten. Nimm' Dich in Acht! Spüre den durchnässten Zorn meiner Anti-Wäsche Magie!\"", "questAtom3Completion": "Der böse Wäschebeschwörer ist besiegt! Saubere Wäsche sammelt sich überall haufenweise. Alles sieht recht ordentlich aus. Wie Du durch die frisch gebügelten Rüstungen watest fällt Dir ein metallischer Schein ins Auge und Du bemerkst einen glänzenden Helm. Der ursprüngliche Eigentümer dieses glänzenden Schatzes mag unbekannt sein, aber als Du ihn aufsetzt bemerkst Du die wärmende Gegenwart eines freizügigen Geistes. Zu schade, dass niemand ein Namensschild angenäht hat.", "questAtom3Boss": "Der Wäschebeschwörer", "questAtom3DropPotion": "Standard-Schlüpfelixier", @@ -357,7 +357,7 @@ "questArmadilloDropArmadilloEgg": "Gürteltier (Ei)", "questArmadilloUnlockText": "Ermöglicht den Kauf von Gürteltiereiern auf dem Marktplatz", "questCowText": "Die Muhtanten-Kuh", - "questCowNotes": "It’s been a long, hot day at Sparring Farms, and there is nothing more you want than a long sip of water and some sleep. You're standing there daydreaming when @Soloana suddenly screams, \"Everyone run! The prize cow has mootated!\"

@eevachu gulps. \"It must be our bad habits that infected it.\"

\"Quick!\" @Feralem Tau says. \"Let’s do something before the udder cows mootate, too.\"

You’ve herd enough. No more daydreaming -- it's time to get those bad habits under control!", + "questCowNotes": "Es war ein langer, heißer Tag auf der Übungs-Farm, und Du würdest nichts lieber tun als einen großen Schluck Wasser zu trinken und etwas zu schlafen. Während Du vor Dich hinträumst, schreit @Soloana plötzlich: \"Lauft! Die Siegerkuh ist muhtiert!\"

@eevachu schluckt. \"Unsere schlechten Angewohnheiten müssen sie infiziert haben.\"

\"Schnell!\", meint @Feralem Tau. \"Lasst uns etwas unternehmen, bevor die anderen Kühe ebenfalls muhtieren.\"

Du hast genug gehört. Keine Tagträumereien mehr -- Es ist Zeit die schlechten Angewohnheiten unter Kontrolle zu bringen!", "questCowCompletion": "Du pflegst Deine guten Gewohnheiten solange, bis die Kuh wieder ihre ursprüngliche Gestalt annimmt. Die Kuh sieht Dich mit ihren schönen, braunen Augen an und schubst drei Eier zu Dir herüber.

@fuzzytrees lacht und überreicht Dir die Eier: \"Vielleicht sind die Babykühe darin immernoch muhtiert. Aber ich vertraue darauf, dass Du Deine guten Gewohnheiten beibehältst, wenn Du sie großziehst!\"", "questCowBoss": "Muhtanten-Kuh", "questCowDropCowEgg": "Kalb (Ei)", @@ -526,15 +526,15 @@ "questLostMasterclasser1CollectHiddenTomes": "Versteckte Bücher", "questLostMasterclasser2Text": "Das Geheimnis der Klassenmeister, Teil 2: Beschwörung des v'Schwinders", "questLostMasterclasser2Notes": "Der Fröhliche Reaper trommelt mit ihren knochigen Fingern auf den Büchern, die ihr mitgebracht habt. “Ach je”, sagt der Meister der Heiler. “Da ist eine bösartige Lebensessenz am Werk. Ich hätte es mir denken können, wenn man die Angriffe der wiederbelebten Schädel während der Vorfälle berücksichtigt.” Ihre rechte Hand @tricksy.fox bringt eine Truhe herein, und Du bist überrascht zu sehen, was beffymaroo daraus hervorholt: es sind genau die Gegenstände, die einst von der mysteriösen Tzina benutzt wurden, um anderen ihren Willen aufzuzwingen.

“Ich werde mit resonierender Heilmagie versuchen, die Kreatur zu manifestieren”, sagt der Fröhliche Reaper, und erinnert Dich daran, dass das Skelett ein eher unkonventioneller Heiler ist. “Du musst die enthüllten Informationen schnell lesen, für den Fall dass sie freikommt.”

Als sie sich konzentriert, fließt wirbelnder Nebel aus den Büchern und windet sich um die Gegenstände. Du blätterst schnell durch die Seiten, in dem Versuch, die neuen Textzeilen zu lesen, die wabernd wieder sichtbar werden. Du kannst nur ein paar Bruchstücke erfassen: “Sand der Zeitwüste” — “die Große Katastrophe” —“in vier Teile gespalten”— “für immer verdorben”— bevor Dir ein einzelner Name ins Auge springt: Zinnya.

Schlagartig befreien sich die Seiten aus Deinen Händen und zerfallen in der Luft in tausend Schnipsel, als mit einer Explosion eine heulende Kreatur erscheint und sich mit den Gegenständen verbindet.

“Das ist ein v'Schwinder!” ruft der Fröhliche Reaper und wirft einen Schutzzauber über euch. “Das sind alte Kreaturen der Verwirrung und Verschleierung. Wenn diese Tzina so einen kontrollieren kann, muss sie eine beängstigende Macht über Lebensmagie haben. Schnell, greift ihn an, bevor er wieder in die Bücher flüchtet!”

", - "questLostMasterclasser2Completion": "The a’Voidant succumbs at last, and you share the snippets that you read.

“None of those references sound familiar, even for someone as old as I,” the Joyful Reaper says. “Except… the Timewastes are a distant desert at the most hostile edge of Habitica. Portals often fail nearby, but swift mounts could get you there in no time. Lady Glaciate will be glad to assist.” Her voice grows amused. “Which means that the enamored Master of Rogues will undoubtedly tag along.” She hands you the glimmering mask. “Perhaps you should try to track the lingering magic in these items to its source. I’ll go harvest some sustenance for your journey.”", + "questLostMasterclasser2Completion": "Der v'Schwinder unterliegt endlich, und Du liest die Schnipsel vor.

“Keine dieser Referenzen klingt vertraut, auch nicht für jemanden, der so alt ist wie ich”, sagt der Fröhliche Reaper. “Außer.... die Zeitwüste ist eine entfernte Wüste am unwirtlichsten Rand von Habitica. Portale versagen oft in der Nähe, aber schnelle Reittiere könnten Dich im Handumdrehen dorthin bringen. Lady Glaciate wird gerne helfen.” Ihre Stimme wird immer amüsierter. \"Das bedeutet, dass der verliebte Meister der Schurken zweifellos mitkommen wird.\" Sie gibt dir die schimmernde Maske. \"Vielleicht solltest du versuchen, die verbleibende Magie in diesen Gegenständen bis zur Quelle zu verfolgen. Ich werde etwas Nahrung für Deine Reise sammeln.\"", "questLostMasterclasser2Boss": "Der v'Schwinder", "questLostMasterclasser2DropEyewear": "Äthermaske (Brille)", "questLostMasterclasser3Text": "Das Geheimnis der Klassenmeister, Teil 3: Stadt im Sand", - "questLostMasterclasser3Notes": "As night unfurls over the scorching sands of the Timewastes, your guides @AnnDeLune, @Kiwibot, and @Katy133 lead you forward. Some bleached pillars poke from the shadowed dunes, and as you approach them, a strange skittering sound echoes across the seemingly-abandoned expanse.

“Invisible creatures!” says the April Fool, clearly covetous. “Oho! Just imagine the possibilities. This must be the work of a truly stealthy Rogue.”

“A Rogue who could be watching us,” says Lady Glaciate, dismounting and raising her spear. “If there’s a head-on attack, try not to irritate our opponent. I don’t want a repeat of the volcano incident.”

He beams at her. “But it was one of your most resplendent rescues.”

To your surprise, Lady Glaciate turns very pink at the compliment. She hastily stomps away to examine the ruins.

“Looks like the wreck of an ancient city,” says @AnnDeLune. “I wonder what…”

Before she can finish her sentence, a portal roars open in the sky. Wasn’t that magic supposed to be nearly impossible here? The hoofbeats of the invisible animals thunder as they flee in panic, and you steady yourself against the onslaught of shrieking skulls that flood the skies.", - "questLostMasterclasser3Completion": "The April Fool surprises the final skull with a spray of sand, and it blunders backwards into Lady Glaciate, who smashes it expertly. As you catch your breath and look up, you see a single flash of someone’s silhouette moving on the other side of the closing portal. Thinking quickly, you snatch up the amulet from the chest of previously-possessed items, and sure enough, it’s drawn towards the unseen person. Ignoring the shouts of alarm from Lady Glaciate and the April Fool, you leap through the portal just as it snaps shut, plummeting into an inky swath of nothingness.", - "questLostMasterclasser3Boss": "Void Skull Swarm", + "questLostMasterclasser3Notes": "Während sich die Nacht über den sengenden Sand der Timewastes legt, führen Dich Deine Führer @AnnDeLune, @Kiwibot und @Katy133 vorwärts. Einige ausgebleichte Säulen ragen aus den schattigen Dünen, und wie Du Dich ihnen näherst, jagt ein seltsames, hallendes Geräusch über die scheinbar verlassene Weite.

“Unsichtbare Kreaturen”, sagt der April-Scherzkeks, eindeutig begehrlich. “Oho! Stellt euch die Möglichkeiten vor. Das muss das Werk eines wirklich heimlichen Schurken sein.”

“Ein Schurke, der uns beobachten könnte”, sagt Lady Glaciate, steigt ab und hebt ihren Speer. “Wenn es einen Frontalangriff gibt, versucht, unseren Gegner nicht zu irritieren. Ich will keine Wiederholung des Vulkanzwischenfalls.”

Er strahlt sie an. “Aber es war eine deiner großartigsten Rettungen.”

Zu deiner Überraschung wird Lady Glaciate durch das Kompliment sehr rosa. Sie stolpert hastig davon, um die Ruinen zu untersuchen.

“Sieht aus wie die Ruinen einer alten Stadt\", sagt @AnnDeLune. \"Ich frage mich, was....”

Bevor sie ihren Satz beenden kann, öffnet sich mit Getöse ein Portal am Himmel. Sollte solche Magie hier nicht fast unmöglich sein? Die Hufschläge der unsichtbaren Tiere donnern, während sie in Panik fliehen, und Du stemmst Dich gegen den Ansturm der schreienden Schädel, die den Himmel überfluten.", + "questLostMasterclasser3Completion": "Der Aprilscherz überrascht den letzten Schädel mit einem Sprühstrahl aus Sand, und dieser stürzt rückwärts in Lady Glaciate, die ihn fachmännisch zerschlägt. Während Du Atem holst und nach oben schaust, siehst Du einen einzigen Blitz der Silhouette von jemandem, der sich auf der anderen Seite des sich schließenden Portals bewegt. Mit einem Geistesblitz, schnappst Du Dir das Amulett aus der Truhe der zuvor besessenen Gegenstände, und tatsächlich wird es von der unsichtbaren Person angezogen. Du ignorierst die Alarmgeräusche von Lady Glaciate und dem April-Scherzkeks und springst durch das Portal, während es sich schließt. Du stürzt in einen tintenschwarzen Streifen des Nichts.", + "questLostMasterclasser3Boss": "Leereschädelschwarm", "questLostMasterclasser3RageTitle": "Schwarmnachwuchs", - "questLostMasterclasser3RageDescription": "Schwarmnachwuchs: Diese Leiste füllt sich, wenn Du Deine täglichen Aufgaben nicht erfüllst. Wenn sie voll ist, heilt sich der Schädelschwarm um 30% seiner übrigen Lebenspunkte!", + "questLostMasterclasser3RageDescription": "Schwarmnachwuchs: Diese Leiste füllt sich, wenn Du Deine täglichen Aufgaben nicht erfüllst. Wenn sie voll ist, heilt sich der Leereschädelschwarm um 30% seiner übrigen Lebenspunkte!", "questLostMasterclasser3RageEffect": "`Void Skull Swarm uses SWARM RESPAWN!`\n\nEmboldened by their victories, more skulls scream down from the heavens, bolstering the swarm!", "questLostMasterclasser3DropBodyAccessory": "Ätheramulett (Körperaccessoire)", "questLostMasterclasser3DropBasePotion": "Standard-Schlüpfelixier", @@ -546,9 +546,9 @@ "questLostMasterclasser4Notes": "You surface from the portal, but you’re still suspended in a strange, shifting netherworld. “That was bold,” says a cold voice. “I have to admit, I hadn’t planned for a direct confrontation yet.” A woman rises from the churning whirlpool of darkness. “Welcome to the Realm of Void.”

You try to fight back your rising nausea. “Are you Zinnya?” you ask.

“That old name for a young idealist,” she says, mouth twisting, and the world writhes beneath you. “No. If anything, you should call me the Anti’zinnya now, given all that I have done and undone.”

Suddenly, the portal reopens behind you, and as the four Masterclassers burst out, bolting towards you, Anti’zinnya’s eyes flash with hatred. “I see that my pathetic replacements have managed to follow you.”

You stare. “Replacements?”

“As the Master Aethermancer, I was the first Masterclasser — the only Masterclasser. These four are a mockery, each possessing only a fragment of what I once had! I commanded every spell and learned every skill. I shaped your very world to my whim — until the traitorous aether itself collapsed under the weight of my talents and my perfectly reasonable expectations. I have been trapped for millennia in this resulting void, recuperating. Imagine my disgust when I learned how my legacy had been corrupted.” She lets out a low, echoing laugh. “My plan was to destroy their domains before destroying them, but I suppose the order is irrelevant.” With a burst of uncanny strength, she charges forward, and the Realm of Void explodes into chaos.", "questLostMasterclasser4Completion": "Under the onslaught of your final attack, the Lost Masterclasser screams in frustration, her body flickering into translucence. The thrashing void stills around her as she slumps forward, and for a moment, she seems to change, becoming younger, calmer, with an expression of peace upon her face… but then everything melts away with scarcely a whisper, and you’re kneeling once more in the desert sand.

“It seems that we have much to learn about our own history,” King Manta says, staring at the broken ruins. “After the Master Aethermancer grew overwhelmed and lost control of her abilities, the outpouring of void must have leached the life from the entire land. Everything probably became deserts like this.”

“No wonder the ancients who founded Habitica stressed a balance of productivity and wellness,” the Joyful Reaper murmurs. “Rebuilding their world would have been a daunting task requiring considerable hard work, but they would have wanted to prevent such a catastrophe from happening again.”

“Oho, look at those formerly possessed items!” says the April Fool. Sure enough, all of them shimmer with a pale, glimmering translucence from the final burst of aether released when you laid Anti’zinnya’s spirit to rest. “What a dazzling effect. I must take notes.”

“The concentrated remnants of aether in this area probably caused these animals to go invisible, too,” says Lady Glaciate, scratching a patch of emptiness behind the ears. You feel an unseen fluffy head nudge your hand, and suspect that you’ll have to do some explaining at the Stables back home. As you look at the ruins one last time, you spot all that remains of the first Masterclasser: her shimmering cloak. Lifting it onto your shoulders, you head back to Habit City, pondering everything that you have learned.

", "questLostMasterclasser4Boss": "Anti'zinnya", - "questLostMasterclasser4RageTitle": "Siphoning Void", - "questLostMasterclasser4RageDescription": "Siphoning Void: This bar fills when you don't complete your Dailies. When it is full, Anti'zinnya will remove the party's Mana!", - "questLostMasterclasser4RageEffect": "`Anti'zinnya uses SIPHONING VOID!` In a twisted inversion of the Ethereal Surge spell, you feel your magic drain away into the darkness!", + "questLostMasterclasser4RageTitle": "Absaugende Leere", + "questLostMasterclasser4RageDescription": "Absaugende Leere: Diese Leiste füllt sich, wenn Du Deine täglichen Aufgaben nicht erfüllst. Wenn sie voll ist, leert Anti'zinnya das Mana Deiner Party!", + "questLostMasterclasser4RageEffect": "`Anti'zinnya benutzt ABSAUGENDE LEERE!` In einer verwundenen Umkehrung des Zauberspruchs Ätherischer Schwall spürst Du, wie Deine Magie in die Dunkelheit abfließt!", "questLostMasterclasser4DropBackAccessory": "Äther Umhang (Rücken Accessoire)", "questLostMasterclasser4DropWeapon": "Äther Kristalle (zweihändige Waffe)", "questLostMasterclasser4DropMount": "Unsichtbares Äther-Reittier", diff --git a/website/common/locales/de/settings.json b/website/common/locales/de/settings.json index fe11d11b32..0bb724d728 100644 --- a/website/common/locales/de/settings.json +++ b/website/common/locales/de/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Benutzernamen dürfen nur Buchstaben von A bis Z, Ziffern von 0 bis 9, Bindstriche oder Unterstriche enthalten.", "currentUsername": "Aktueller Benutzername:", "displaynameIssueLength": "Anzeigenamen müssen zwischen 1 und 30 Zeichen haben.", - "displaynameIssueSlur": "Anzeigenamen dürfen keine unangebrachte Sprache enthalten.", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Gehe zu Einstellungen", "usernameVerifiedConfirmation": "Dein Benutzername, <%= username %>, ist bestätigt!", "usernameNotVerified": "Bitte bestätige Deinen Benutzernamen.", - "changeUsernameDisclaimer": "Wir werden bald die Login-Namen zu eindeutigen, öffentlichen Benutzernamen umstellen. Dieser Benutzername wird für Einladungen, @Erwähnungen im Chat und Nachrichten verwendet werden." + "changeUsernameDisclaimer": "Wir werden bald die Login-Namen zu eindeutigen, öffentlichen Benutzernamen umstellen. Dieser Benutzername wird für Einladungen, @Erwähnungen im Chat und Nachrichten verwendet werden.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/de/subscriber.json b/website/common/locales/de/subscriber.json index 18b06912f5..b1d46070b2 100644 --- a/website/common/locales/de/subscriber.json +++ b/website/common/locales/de/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Hast Du einen Rabatt-Code?", "subscriptionAlreadySubscribedLeadIn": "Danke für's abonnieren!", "subscriptionAlreadySubscribed1": "Um die Details Deines Abonnements zu sehen und es zu widerrufen, erneuern oder zu ändern, gehe bitte zu Benutzer > Einstellungen > Abonnement.", - "purchaseAll": "Alles Kaufen", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Abonnenten können im Markt Edelsteine mit Gold kaufen! Für schnellen Zugriff kannst Du den Edelstein in Deiner Belohnungsspalte anheften.", "gemsRemaining": "verbleibende Edelsteine", "notEnoughGemsToBuy": "Du kannst die gewünschte Anzahl Edelsteine nicht kaufen" diff --git a/website/common/locales/en@pirate/character.json b/website/common/locales/en@pirate/character.json index 4b14794f54..68261687a6 100644 --- a/website/common/locales/en@pirate/character.json +++ b/website/common/locales/en@pirate/character.json @@ -7,7 +7,7 @@ "noPhoto": "This Habitican hasn't added a photo.", "other": "Other", "fullName": "Full Name", - "displayName": "Display Name", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Photo", diff --git a/website/common/locales/en@pirate/front.json b/website/common/locales/en@pirate/front.json index e8bdb580f8..971cd216de 100644 --- a/website/common/locales/en@pirate/front.json +++ b/website/common/locales/en@pirate/front.json @@ -271,15 +271,9 @@ "emailTaken": "Email address is already used in an account.", "newEmailRequired": "Missing new email address.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "Password confirmation doesn't match password.", "invalidLoginCredentials": "Incorrect username and/or email and/or password.", "passwordResetPage": "Reset Password", @@ -334,7 +328,7 @@ "joinMany": "Join over 2,000,000 people having fun while accomplishing their goals!", "joinToday": "Join Habitica Today", "signup": "Sign Up", - "getStarted": "Get Started", + "getStarted": "Get Started!", "mobileApps": "Mobile Apps", "learnMore": "Learn More" } \ No newline at end of file diff --git a/website/common/locales/en@pirate/generic.json b/website/common/locales/en@pirate/generic.json index 13295ba605..8fbb061afb 100644 --- a/website/common/locales/en@pirate/generic.json +++ b/website/common/locales/en@pirate/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "User ID is required", "resetFilters": "Clear all filters", "applyFilters": "Apply Filters", + "wantToWorkOn": "I want to work on:", "categories": "Categories", "habiticaOfficial": "Habitica Official", "animals": "Animals", diff --git a/website/common/locales/en@pirate/groups.json b/website/common/locales/en@pirate/groups.json index 1c5d38c954..bb04df402e 100644 --- a/website/common/locales/en@pirate/groups.json +++ b/website/common/locales/en@pirate/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Invite Existin' Users", "byColon": "By:", "inviteNewUsers": "Invite New Users", - "sendInvitations": "Send Invitations", + "sendInvitations": "Send Invites", "invitationsSent": "Invitations sent!", "invitationSent": "Invitation sent!", "invitedFriend": "Invited a Friend", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "You cannot remove yourself!", "groupMemberNotFound": "User not found among group's members", "mustBeGroupMember": "Must be member of the group.", - "canOnlyInviteEmailUuid": "Can only invite using uuids or emails.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Missing email address in invite.", "inviteMissingUuid": "Missing user id in invite", "inviteMustNotBeEmpty": "Invite must not be empty.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", "userWithIDNotFound": "User with id \"<%= userId %>\" not found.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "User does not have a local registration (username, email, password).", "uuidsMustBeAnArray": "User ID invites must be an array.", "emailsMustBeAnArray": "Email address invites must be an array.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "You can only invite \"<%= maxInvites %>\" at a time", "partyExceedsMembersLimit": "Party size is limited to <%= maxMembersParty %> members", "onlyCreatorOrAdminCanDeleteChat": "Not authorized to delete this message!", @@ -361,6 +363,10 @@ "liked": "Liked", "joinGuild": "Join Guild", "inviteToGuild": "Invite to Guild", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Message Guild Leader", "donateGems": "Donate Gems", "updateGuild": "Update Guild", diff --git a/website/common/locales/en@pirate/messages.json b/website/common/locales/en@pirate/messages.json index ac56947b90..bf5b09dcdf 100644 --- a/website/common/locales/en@pirate/messages.json +++ b/website/common/locales/en@pirate/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Notification ids are required.", "unallocatedStatsPoints": "You have <%= points %> unallocated Stat Points", "beginningOfConversation": "This is the beginning of your conversation with <%= userName %>. Remember to be kind, respectful, and follow the Community Guidelines!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/en@pirate/npc.json b/website/common/locales/en@pirate/npc.json index 50d892b210..1ac8d8d589 100644 --- a/website/common/locales/en@pirate/npc.json +++ b/website/common/locales/en@pirate/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Welcome to", "welcomeBack": "Welcome back!", "justin": "Justin", - "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, your guide to Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "To start, you'll need to create an avatar.", "justinIntroMessage3": "Great! Now, what are you interested in working on throughout this journey?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Here we are! I've filled out some Tasks for you based on your interests, so you can get started right away. Click a Task to edit or add new Tasks to fit your routine!", "prev": "Prev", "next": "Next", diff --git a/website/common/locales/en@pirate/settings.json b/website/common/locales/en@pirate/settings.json index ac65015488..f472ccf97f 100644 --- a/website/common/locales/en@pirate/settings.json +++ b/website/common/locales/en@pirate/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/en@pirate/subscriber.json b/website/common/locales/en@pirate/subscriber.json index e331d47fc1..be3bb9b122 100644 --- a/website/common/locales/en@pirate/subscriber.json +++ b/website/common/locales/en@pirate/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "Thanks for subscribing!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Purchase All", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "gems remaining", "notEnoughGemsToBuy": "You are unable to buy that amount of gems" diff --git a/website/common/locales/en_GB/character.json b/website/common/locales/en_GB/character.json index a146417c22..727d7ff1d2 100644 --- a/website/common/locales/en_GB/character.json +++ b/website/common/locales/en_GB/character.json @@ -7,7 +7,7 @@ "noPhoto": "This Habitican hasn't added a photo.", "other": "Other", "fullName": "Full Name", - "displayName": "Display Name", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Photo", diff --git a/website/common/locales/en_GB/front.json b/website/common/locales/en_GB/front.json index 284435afff..90722ec61b 100644 --- a/website/common/locales/en_GB/front.json +++ b/website/common/locales/en_GB/front.json @@ -271,15 +271,9 @@ "emailTaken": "Email address is already used in an account.", "newEmailRequired": "Missing new email address.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "Password confirmation doesn't match password.", "invalidLoginCredentials": "Incorrect username and/or email and/or password.", "passwordResetPage": "Reset Password", @@ -334,7 +328,7 @@ "joinMany": "Join over 2,000,000 people having fun while accomplishing their goals!", "joinToday": "Join Habitica Today", "signup": "Sign Up", - "getStarted": "Get Started", + "getStarted": "Get Started!", "mobileApps": "Mobile Apps", "learnMore": "Learn More" } \ No newline at end of file diff --git a/website/common/locales/en_GB/generic.json b/website/common/locales/en_GB/generic.json index 89a39833fb..96cf2510ad 100644 --- a/website/common/locales/en_GB/generic.json +++ b/website/common/locales/en_GB/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "User ID is required", "resetFilters": "Clear all filters", "applyFilters": "Apply Filters", + "wantToWorkOn": "I want to work on:", "categories": "Categories", "habiticaOfficial": "Habitica Official", "animals": "Animals", diff --git a/website/common/locales/en_GB/groups.json b/website/common/locales/en_GB/groups.json index 2a57eb9df9..94e6c726af 100644 --- a/website/common/locales/en_GB/groups.json +++ b/website/common/locales/en_GB/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Invite Existing Users", "byColon": "By:", "inviteNewUsers": "Invite New Users", - "sendInvitations": "Send Invitations", + "sendInvitations": "Send Invites", "invitationsSent": "Invitations sent!", "invitationSent": "Invitation sent!", "invitedFriend": "Invited a Friend", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "You cannot remove yourself!", "groupMemberNotFound": "User not found among group's members.", "mustBeGroupMember": "Must be member of the group.", - "canOnlyInviteEmailUuid": "Can only invite using UUIDs or emails.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Missing email address in invite.", "inviteMissingUuid": "Missing user ID in invite", "inviteMustNotBeEmpty": "Invite must not be empty.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", "userWithIDNotFound": "User with ID \"<%= userId %>\" not found.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "User does not have a local registration (username, email, password).", "uuidsMustBeAnArray": "User ID invites must be an array.", "emailsMustBeAnArray": "Email address invites must be an array.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "You can only invite \"<%= maxInvites %>\" at a time.", "partyExceedsMembersLimit": "Party size is limited to <%= maxMembersParty %> members", "onlyCreatorOrAdminCanDeleteChat": "Not authorised to delete this message!", @@ -361,6 +363,10 @@ "liked": "Liked", "joinGuild": "Join Guild", "inviteToGuild": "Invite to Guild", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Message Guild Leader", "donateGems": "Donate Gems", "updateGuild": "Update Guild", diff --git a/website/common/locales/en_GB/messages.json b/website/common/locales/en_GB/messages.json index 145e02fcec..bd44447ecb 100644 --- a/website/common/locales/en_GB/messages.json +++ b/website/common/locales/en_GB/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Notification ids are required.", "unallocatedStatsPoints": "You have <%= points %> unallocated Stat Points", "beginningOfConversation": "This is the beginning of your conversation with <%= userName %>. Remember to be kind, respectful, and follow the Community Guidelines!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/en_GB/npc.json b/website/common/locales/en_GB/npc.json index 3ff4aaf625..68899fdea7 100644 --- a/website/common/locales/en_GB/npc.json +++ b/website/common/locales/en_GB/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Welcome to", "welcomeBack": "Welcome back!", "justin": "Justin", - "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, your guide to Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "To start, you'll need to create an avatar.", "justinIntroMessage3": "Great! Now, what are you interested in working on throughout this journey?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Here we are! I've filled out some Tasks for you based on your interests, so you can get started right away. Click a Task to edit or add new Tasks to fit your routine!", "prev": "Prev", "next": "Next", diff --git a/website/common/locales/en_GB/settings.json b/website/common/locales/en_GB/settings.json index 1e6fa3721e..f8ec292148 100644 --- a/website/common/locales/en_GB/settings.json +++ b/website/common/locales/en_GB/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/en_GB/subscriber.json b/website/common/locales/en_GB/subscriber.json index 1415f63a03..f3409ab63e 100644 --- a/website/common/locales/en_GB/subscriber.json +++ b/website/common/locales/en_GB/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "Thanks for subscribing!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Purchase All", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "gems remaining", "notEnoughGemsToBuy": "You are unable to buy that amount of gems" diff --git a/website/common/locales/es/character.json b/website/common/locales/es/character.json index 95d6715572..af1b507b98 100644 --- a/website/common/locales/es/character.json +++ b/website/common/locales/es/character.json @@ -7,7 +7,7 @@ "noPhoto": "Este habiticano no ha añadido una foto.", "other": "Otro", "fullName": "Nombre completo", - "displayName": "Nombre de usuario", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Foto", diff --git a/website/common/locales/es/front.json b/website/common/locales/es/front.json index 64d851ab84..daca09747d 100644 --- a/website/common/locales/es/front.json +++ b/website/common/locales/es/front.json @@ -271,15 +271,9 @@ "emailTaken": "Ya existe una cuenta con esa dirección de correo electrónico.", "newEmailRequired": "Falta la nueva dirección de correo electrónico.", "usernameTime": "¡Es la hora de establecer tu nombre de usuario!", - "usernameInfo": "Tu nombre público no ha cambiado, pero tu antiguo nombre de acceso se convertirá en tu nombre de usuario. Este nombre de usuario se utilizará para invitaciones, @menicones en los chats y mensajes.

Si quieres saber más sobre este cambio, visita la página de la wiki Nombres de los Jugadores.", - "usernameTOSRequirements": "Los nombre de usuario deben adecuarse a nuestros Términos de Servicio y Normas de la Comunidad. Si no has establecido un nombre de inicio de sesión, tu nombre de usuario será autogenerado.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Este nombre de usuario ya está cogido.", - "usernameWrongLength": "El nombre de usuario debe tener una longitud de entre 1 y 20 caracteres.", - "displayNameWrongLength": "Los nombres públicos deben ser de entre 1 y 30 caracteres de longitud.", - "usernameBadCharacters": "Los nombres de usuario solo pueden contener letras de la a a las z, números del 0 al 9, guiones o barras bajas.", - "nameBadWords": "Los nombres no pueden incluir palabras inadecuadas.", - "confirmUsername": "Confirmar nombre de usuario", - "usernameConfirmed": "Nombre de usuario confirmado", "passwordConfirmationMatch": "Las contraseñas no coinciden.", "invalidLoginCredentials": "El nombre de usuario y/o correo electrónico y/o conseña no son correctos.", "passwordResetPage": "Restablecer Contraseña", @@ -334,7 +328,7 @@ "joinMany": "¡Únete a más de 2.000.000 de personas que se divierten mientras consiguen sus objetivos!", "joinToday": "Únete hoy a Habitica", "signup": "Regístrate", - "getStarted": "Comenzar", + "getStarted": "Get Started!", "mobileApps": "Apps para móvil", "learnMore": "Saber más" } \ No newline at end of file diff --git a/website/common/locales/es/generic.json b/website/common/locales/es/generic.json index e6032ffb39..ad20337397 100644 --- a/website/common/locales/es/generic.json +++ b/website/common/locales/es/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Es necesaria un ID de usuario", "resetFilters": "Limpiar todos los filtros", "applyFilters": "Aplicar filtros", + "wantToWorkOn": "I want to work on:", "categories": "Categorías", "habiticaOfficial": "Habitica Oficial", "animals": "Animales", diff --git a/website/common/locales/es/groups.json b/website/common/locales/es/groups.json index e6f54de7c2..0a0b2d714c 100644 --- a/website/common/locales/es/groups.json +++ b/website/common/locales/es/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Invitar a usuarios ya registrados", "byColon": "Por:", "inviteNewUsers": "Invitar a usuarios nuevos", - "sendInvitations": "Enviar invitaciones", + "sendInvitations": "Send Invites", "invitationsSent": "¡Invitaciones enviadas!", "invitationSent": "¡Invitación enviada!", "invitedFriend": "Invitó a un Amigo", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "¡No te puedes quitar a ti mismo!", "groupMemberNotFound": "No se pudo encontrar al usuario entre los miembros del grupo.", "mustBeGroupMember": "Debe ser miembro del grupo.", - "canOnlyInviteEmailUuid": "Solo se puede invitar mediante UUID o correo electrónico.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Falta la dirección de correo electrónico en la invitación.", "inviteMissingUuid": "Falta el ID del usuario en la invitación", "inviteMustNotBeEmpty": "La invitación no puede estar vacia.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "ID de usuario: <%= userId %>, Usuario \"<%= username %>\" ya tiene una invitación pendiente.", "userAlreadyInAParty": "ID de usuario: <%= userId %>, Usuario \"<%= username %>\" ya pertenece a un equipo.", "userWithIDNotFound": "No se pudo encontrar al usuario con la id \"<%= userId %>\".", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "El usuario no tiene un registro local (nombre de usuario, correo electrónico y contraseña)", "uuidsMustBeAnArray": "Las invitaciones por ID de usuario deben ser una matriz.", "emailsMustBeAnArray": "Las invitaciones por dirección de correo electrónico deben ser una matriz.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "No puedes invitar a más de \"<%= maxInvites %>\" usuarios a la vez", "partyExceedsMembersLimit": "El número de integrantes de Grupo está limitado a <%= maxMembersParty %>", "onlyCreatorOrAdminCanDeleteChat": "¡No estás autorizado para borrar este mensaje!", @@ -361,6 +363,10 @@ "liked": "Te gusta", "joinGuild": "Únete a la hermandad", "inviteToGuild": "Invita a la hermandad", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Mensajea al líder de hermandad", "donateGems": "Dona gemas", "updateGuild": "Actualiza hermandad", diff --git a/website/common/locales/es/messages.json b/website/common/locales/es/messages.json index 9c18365da5..0f88654ba4 100644 --- a/website/common/locales/es/messages.json +++ b/website/common/locales/es/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Se requieren ids de notificación.", "unallocatedStatsPoints": "Tienes <%= points %> Puntos de Estadísticas sin asignar", "beginningOfConversation": "Este es el principio de tu conversación con <%= userName %>. ¡Recuerda ser amable, respetuoso y seguir las Normas de la Comunidad!", - "messageDeletedUser": "Lo sentimos, este usuario ha eliminado su cuenta." + "messageDeletedUser": "Lo sentimos, este usuario ha eliminado su cuenta.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/es/npc.json b/website/common/locales/es/npc.json index 1767899838..a59a2bed04 100644 --- a/website/common/locales/es/npc.json +++ b/website/common/locales/es/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Bienvenido a", "welcomeBack": "¡Bienvenido de nuevo!", "justin": "Justin", - "justinIntroMessage1": "¡Hola! Debes ser nuevo por aquí. Mi nombre es Justin, tu guía de Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Para comenzar, necesitas crearte un avatar.", "justinIntroMessage3": "¡Genial! Ahora, ¿en qué te gustaría centrarte a lo largo de este viaje?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "¡Vamos allá! He incluido algunas tareas para ti basándome en tus intereses para que puedas empezar inmediatamente. ¡Pulsa una tarea para editarla, o añade otras que se ajusten a tu rutina!", "prev": "Anterior", "next": "Siguiente", diff --git a/website/common/locales/es/settings.json b/website/common/locales/es/settings.json index 3078ce1e3e..72f4d4d7c7 100644 --- a/website/common/locales/es/settings.json +++ b/website/common/locales/es/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/es/subscriber.json b/website/common/locales/es/subscriber.json index ca751712c9..881363e5d6 100644 --- a/website/common/locales/es/subscriber.json +++ b/website/common/locales/es/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "¿Tienes un código de cupón?", "subscriptionAlreadySubscribedLeadIn": "¡Gracias por suscribirte!", "subscriptionAlreadySubscribed1": "Para ver tus detalles de suscripción y cancelar, renovar o cambiar tu suscripción, por favor ve a Icono de usuario > Ajustes > Suscripción.", - "purchaseAll": "Comprar Todo.", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "¡Los suscriptores pueden comprar gemas a cambio de oro! Para un acceso más fácil, también puedes fijar las gemas a tu columna de Recompensas.", "gemsRemaining": "Gemas que quedan", "notEnoughGemsToBuy": "No puedes comprar esa cantidad de gemas" diff --git a/website/common/locales/es_419/backgrounds.json b/website/common/locales/es_419/backgrounds.json index 0a857098b6..0aa20c98ea 100644 --- a/website/common/locales/es_419/backgrounds.json +++ b/website/common/locales/es_419/backgrounds.json @@ -342,21 +342,21 @@ "backgrounds042018": "Conjunto 47: Publicado en abril 2018", "backgroundTulipGardenText": "Jardín de tulipanes", "backgroundTulipGardenNotes": "Tiptoe through a Tulip Garden.", - "backgroundFlyingOverWildflowerFieldText": "Field of Wildflowers", - "backgroundFlyingOverWildflowerFieldNotes": "Soar above a Field of Wildflowers.", + "backgroundFlyingOverWildflowerFieldText": "Campo de flores silvestres", + "backgroundFlyingOverWildflowerFieldNotes": "Elévate sobre un campo de flores silvestres", "backgroundFlyingOverAncientForestText": "Bosque antiguo", "backgroundFlyingOverAncientForestNotes": "Fly over the canopy of an Ancient Forest.", "backgrounds052018": "Conjunto 48: Publicado en mayo 2018", "backgroundTerracedRiceFieldText": "Terraced Rice Field", "backgroundTerracedRiceFieldNotes": "Enjoy a Terraced Rice Field in the growing season.", - "backgroundFantasticalShoeStoreText": "Fantastical Shoe Store", + "backgroundFantasticalShoeStoreText": "Zapatería fantástica", "backgroundFantasticalShoeStoreNotes": "Look for fun new footwear in the Fantastical Shoe Store.", "backgroundChampionsColosseumText": "Coliseo de los campeones", "backgroundChampionsColosseumNotes": "Bask in the glory of the Champions' Colosseum.", "backgrounds062018": "Conjunto 49: Publicado en junio 2018", "backgroundDocksText": "Muelles", "backgroundDocksNotes": "Pescar desde lo alto de los muelles", - "backgroundRowboatText": "Rowboat", + "backgroundRowboatText": "Bote de remos", "backgroundRowboatNotes": "Sing rounds in a Rowboat.", "backgroundPirateFlagText": "Bandera pirata", "backgroundPirateFlagNotes": "Fly a fearsome Pirate Flag.", @@ -379,20 +379,20 @@ "backgroundApplePickingNotes": "Go Apple Picking and bring home a bushel.", "backgroundGiantBookText": "Giant Book", "backgroundGiantBookNotes": "Read as you walk through the pages of a Giant Book.", - "backgroundCozyBarnText": "Cozy Barn", - "backgroundCozyBarnNotes": "Relax with your pets and mounts in their Cozy Barn.", + "backgroundCozyBarnText": "Granero acogedor", + "backgroundCozyBarnNotes": "Relájate con tus mascotas y monturas en su granero acogedor", "backgrounds102018": "SET 53: Released October 2018", "backgroundBayouText": "Bayou", "backgroundBayouNotes": "Bask in the fireflies' glow on the misty Bayou.", - "backgroundCreepyCastleText": "Creepy Castle", - "backgroundCreepyCastleNotes": "Dare to approach a Creepy Castle.", - "backgroundDungeonText": "Dungeon", - "backgroundDungeonNotes": "Rescue the prisoners of a spooky Dungeon.", + "backgroundCreepyCastleText": "Castillo escalofriante", + "backgroundCreepyCastleNotes": "Atrévete a acercarte al castillo escalofriante", + "backgroundDungeonText": "Calabozo", + "backgroundDungeonNotes": "Rescata a los prisioneros de un calabozo espeluznante", "backgrounds112018": "SET 54: Released November 2018", - "backgroundBackAlleyText": "Back Alley", + "backgroundBackAlleyText": "Callejón trasero", "backgroundBackAlleyNotes": "Look shady loitering in a Back Alley.", - "backgroundGlowingMushroomCaveText": "Glowing Mushroom Cave", + "backgroundGlowingMushroomCaveText": "Cueva de hongos brillantes", "backgroundGlowingMushroomCaveNotes": "Stare in awe at a Glowing Mushroom Cave.", - "backgroundCozyBedroomText": "Cozy Bedroom", - "backgroundCozyBedroomNotes": "Curl up in a Cozy Bedroom." + "backgroundCozyBedroomText": "Recámara acogedora", + "backgroundCozyBedroomNotes": "Acurrúcate en una recámara acogedora" } \ No newline at end of file diff --git a/website/common/locales/es_419/character.json b/website/common/locales/es_419/character.json index 6a9e191edc..23f046c21b 100644 --- a/website/common/locales/es_419/character.json +++ b/website/common/locales/es_419/character.json @@ -7,7 +7,7 @@ "noPhoto": "Este Habitiano no ha añadido una foto.", "other": "Otro", "fullName": "Nombre completo", - "displayName": "Nombre para mostrar", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Foto", diff --git a/website/common/locales/es_419/front.json b/website/common/locales/es_419/front.json index 5165f76442..f9e6a4d2f4 100644 --- a/website/common/locales/es_419/front.json +++ b/website/common/locales/es_419/front.json @@ -271,15 +271,9 @@ "emailTaken": "Esta dirección de correo electrónico ya está en uso.", "newEmailRequired": "El nuevo correo electronico no puede ser encontrado.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "La confirmacion de contraseña y la contraseña no coinciden.", "invalidLoginCredentials": "Nombre de usuario , email y/o contraseñas incorrectos.", "passwordResetPage": "Renovar la contraseña", @@ -334,7 +328,7 @@ "joinMany": "¡Únete a más de 2,000,000 de personas que se divierten mientras logran sus objetivos!", "joinToday": "Únete hoy a Habitica", "signup": "Regístrate", - "getStarted": "Empieza", + "getStarted": "Get Started!", "mobileApps": "Aplicaciones Móviles", "learnMore": "Aprende Más" } \ No newline at end of file diff --git a/website/common/locales/es_419/generic.json b/website/common/locales/es_419/generic.json index e4a9c9cce0..6a5ac739b6 100644 --- a/website/common/locales/es_419/generic.json +++ b/website/common/locales/es_419/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "El ID de usuario es requerido", "resetFilters": "Quitar todos los filtros ", "applyFilters": "Aplicar filtros", + "wantToWorkOn": "I want to work on:", "categories": "Categorías", "habiticaOfficial": "Habitica Oficial", "animals": "Animales", diff --git a/website/common/locales/es_419/groups.json b/website/common/locales/es_419/groups.json index ef02915a85..84b8d2bb7b 100644 --- a/website/common/locales/es_419/groups.json +++ b/website/common/locales/es_419/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Invitar a usuarios existentes", "byColon": "Por:", "inviteNewUsers": "Invitar a usuarios nuevos", - "sendInvitations": "Enviar invitaciones", + "sendInvitations": "Send Invites", "invitationsSent": "¡Invitaciones enviadas!", "invitationSent": "¡Invitación enviada!", "invitedFriend": "Invitó a un Amigo", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "No te puedes sacar.", "groupMemberNotFound": "Usuario no encontrado entre los miembros del equipo.", "mustBeGroupMember": "Tiene que ser miembro del grupo.", - "canOnlyInviteEmailUuid": "Solo se puede invitar usando uuids o correos.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "No se encuentra el correo electronico en la invitacíon.", "inviteMissingUuid": "Falta el ID de usuario en la invitación", "inviteMustNotBeEmpty": "La invitación no debe estar vacía", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", "userWithIDNotFound": "Usuario, con el id \"<%= userId %>\" no encontrado.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Usuario no tiene un registro local (Nombre de usuario, correo, contraseña)", "uuidsMustBeAnArray": "Las invitaciónes de ID de usuarios deben ser un array.", "emailsMustBeAnArray": "Dirección de correo electronico debe ser un array", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Solo puedes invitar \"<%= maxInvites %>\" a la vez.", "partyExceedsMembersLimit": "El tamaño del Grupo está limitado a <%= maxMembersParty %> miembros", "onlyCreatorOrAdminCanDeleteChat": "¡No autorizado a eliminar este mensaje!", @@ -361,6 +363,10 @@ "liked": "Te gusta", "joinGuild": "Unirse al Gremio", "inviteToGuild": "Invitar al Gremio", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Mensaje para el Líder del Gremio", "donateGems": "Donar Gemas", "updateGuild": "Actualizar Gremio", diff --git a/website/common/locales/es_419/messages.json b/website/common/locales/es_419/messages.json index 4df9ff5354..d36f7e1ddf 100644 --- a/website/common/locales/es_419/messages.json +++ b/website/common/locales/es_419/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Se requiere el ID de notificación.", "unallocatedStatsPoints": "Tienes <%= points %> Puntos de Atributo sin asignar ", "beginningOfConversation": "Este es el comienzo de tu conversación con <%= userName %>. ¡Recuerda ser amable, respetuoso y seguir las Normas de la Comunidad!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/es_419/npc.json b/website/common/locales/es_419/npc.json index 40e4d3a3a4..af1d6a8eac 100644 --- a/website/common/locales/es_419/npc.json +++ b/website/common/locales/es_419/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Bienvenido a", "welcomeBack": "¡Bienvenido de vuelta!", "justin": "Justin", - "justinIntroMessage1": "¡Hola! Debes ser nuevo por aquí. Mi nombre es Justin, tu guía en Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Para comenzar, necesitarás crear un avatar.", "justinIntroMessage3": "¡Genial! Ahora, ¿en qué te interesa trabajar durante este viaje?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "¡Aquí estamos! He llenado algunas Tareas para ti según tus intereses, así que podrás comenzar en seguida. ¡Haz clic en una Tarea para editarla o agrega nuevas Tareas que encajen en tu rutina!", "prev": "Ant", "next": "Sig", diff --git a/website/common/locales/es_419/settings.json b/website/common/locales/es_419/settings.json index b168687f23..c17a5d6e5e 100644 --- a/website/common/locales/es_419/settings.json +++ b/website/common/locales/es_419/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/es_419/subscriber.json b/website/common/locales/es_419/subscriber.json index 1659bb5ed3..e5448ea622 100644 --- a/website/common/locales/es_419/subscriber.json +++ b/website/common/locales/es_419/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "¿Tienes algún Código de cupón?", "subscriptionAlreadySubscribedLeadIn": "¡Gracias por suscribirte!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Cómpralo todo", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "Gemas restantes", "notEnoughGemsToBuy": "No puedes comprar ese número de gemas." diff --git a/website/common/locales/fr/backgrounds.json b/website/common/locales/fr/backgrounds.json index a6e8633df8..c29eaed01f 100644 --- a/website/common/locales/fr/backgrounds.json +++ b/website/common/locales/fr/backgrounds.json @@ -389,10 +389,10 @@ "backgroundDungeonText": "Donjon", "backgroundDungeonNotes": "Sauvez les prisonniers d'un Dongeon effrayant.", "backgrounds112018": "SET 54: Released November 2018", - "backgroundBackAlleyText": "Back Alley", + "backgroundBackAlleyText": "Ruelle", "backgroundBackAlleyNotes": "Look shady loitering in a Back Alley.", "backgroundGlowingMushroomCaveText": "Glowing Mushroom Cave", "backgroundGlowingMushroomCaveNotes": "Stare in awe at a Glowing Mushroom Cave.", - "backgroundCozyBedroomText": "Cozy Bedroom", - "backgroundCozyBedroomNotes": "Curl up in a Cozy Bedroom." + "backgroundCozyBedroomText": "Chambre Douillette", + "backgroundCozyBedroomNotes": "Se pelotonner dans une Chambre Douillette" } \ No newline at end of file diff --git a/website/common/locales/fr/character.json b/website/common/locales/fr/character.json index 9749c23420..3dddb5e6eb 100644 --- a/website/common/locales/fr/character.json +++ b/website/common/locales/fr/character.json @@ -7,7 +7,7 @@ "noPhoto": "Cette personne n'a pas ajouté de photo", "other": "Autres", "fullName": "Nom complet", - "displayName": "Pseudonyme", + "displayName": "Display name", "changeDisplayName": "Changer le nom affiché", "newDisplayName": "Nouveau nom affiché", "displayPhoto": "Photo", diff --git a/website/common/locales/fr/front.json b/website/common/locales/fr/front.json index 3330bb8b92..37ea72497b 100644 --- a/website/common/locales/fr/front.json +++ b/website/common/locales/fr/front.json @@ -271,15 +271,9 @@ "emailTaken": "Adresse courriel déjà utilisée par un utilisateur.", "newEmailRequired": "Nouvelle adresse courriel manquante.", "usernameTime": "Il est temps de définir votre nom d'utilisateur !", - "usernameInfo": "Votre nom affiché n'a pas changé, mais votre ancien nom de connexion va maintenant devenir votre nom d'utilisateur public. Ce nom d'utilisateur sera utilisé pour les invitations, les @mentions dans les discussions, et les messages.

Si vous voulez en savoir plus sur ces modifications, visitez la page Noms de joueur dans le wiki.", - "usernameTOSRequirements": "Les noms d'utilisateurs doivent se conformer à nos conditions d'utilisation et à nos règles de vie en communauté. Si vous n'aviez pas précédemment défini un nom de connexion, votre nom d'utilisateur a été auto-généré.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Le nom de connexion est déjà utilisé.", - "usernameWrongLength": "La longueur du nom d'utilisateur doit être comprise entre 1 et 20 caractères.", - "displayNameWrongLength": "La longueur du nom affiché doit être comprise entre 1 et 30 caractères.", - "usernameBadCharacters": "Le nom d'utilisateur doit uniquement contenir des lettres de a à z, des chiffres de 0 à 9, des traits d'union et/ou des tirets bas.", - "nameBadWords": "Les noms ne peuvent inclure des mots grossiers.", - "confirmUsername": "Confirmer le nom d'utilisateur", - "usernameConfirmed": "Nom d'utilisateur confirmé", "passwordConfirmationMatch": "La confirmation du mot de passe ne correspond pas au mot de passe.", "invalidLoginCredentials": "Nom d'utilisateur, courriel ou mot de passe incorrect.", "passwordResetPage": "Réinitialiser le mot de passe", @@ -334,7 +328,7 @@ "joinMany": "Rejoignez plus de 2 000 000 de personnes qui s'amusent en réalisant leurs objectifs !", "joinToday": "Rejoignez Habitica aujourd'hui", "signup": "Inscrivez-vous", - "getStarted": "Commencez", + "getStarted": "Get Started!", "mobileApps": "Applications mobiles", "learnMore": "En savoir plus" } \ No newline at end of file diff --git a/website/common/locales/fr/gear.json b/website/common/locales/fr/gear.json index 7f8668b09a..e101d58a47 100644 --- a/website/common/locales/fr/gear.json +++ b/website/common/locales/fr/gear.json @@ -785,7 +785,7 @@ "armorArmoireRobeOfSpadesText": "Tunique de Pique", "armorArmoireRobeOfSpadesNotes": "Cette tunique luxuriante contient des poches dissimulées pour y ranger des trésors ou des armes - c'est vous qui voyez ! Augmente la Force de <%= str %>. Armoire enchantée : Set As de Pique (objet 2 sur 3).", "armorArmoireSoftBlueSuitText": "Soft Blue Suit", - "armorArmoireSoftBlueSuitNotes": "Blue is a calming colour. So calming, some even wear this soft outfit to sleep... zZz. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Blue Loungewear Set (Item 2 of 3).", + "armorArmoireSoftBlueSuitNotes": "Le bleu est une couleur apaisante. À tel point que certains revêtent même cette douce tenue pour dormir... zZz. Augmente l'Intelligence de <%= int %> et la Perception de <%= per %>. Armoire enchantée: Set de Vêtements d'intérieur Bleus (Objet 2 de 3).", "headgear": "heaume", "headgearCapitalized": "Couvre-chef", "headBase0Text": "Pas de couvre-chef", diff --git a/website/common/locales/fr/generic.json b/website/common/locales/fr/generic.json index bfa490c1ba..2b6385544f 100644 --- a/website/common/locales/fr/generic.json +++ b/website/common/locales/fr/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Une ID d'utilisateur est nécessaire", "resetFilters": "Réinitialiser les filtres", "applyFilters": "Appliquer les filtres", + "wantToWorkOn": "I want to work on:", "categories": "Catégories", "habiticaOfficial": "Habitica officiel", "animals": "Animaux", diff --git a/website/common/locales/fr/groups.json b/website/common/locales/fr/groups.json index 09a8f10a99..4577392c88 100644 --- a/website/common/locales/fr/groups.json +++ b/website/common/locales/fr/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Inviter des membres existants", "byColon": "Invité par :", "inviteNewUsers": "Inviter de nouveaux membres", - "sendInvitations": "Envoyer des Invitations", + "sendInvitations": "Send Invites", "invitationsSent": "Invitations envoyées !", "invitationSent": "Invitation envoyée !", "invitedFriend": "A invité un ami", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Vous ne pouvez pas vous supprimer vous-même !", "groupMemberNotFound": "Utilisateur non trouvé parmi les membres du groupe", "mustBeGroupMember": "Doit être un membre du groupe.", - "canOnlyInviteEmailUuid": "Vous ne pouvez inviter qu'avec des UUID ou des courriels.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "L'adresse courriel est manquante dans l'invitation.", "inviteMissingUuid": "L'ID d'utilisateur est manquante dans l'invitation.", "inviteMustNotBeEmpty": "L'invitation ne doit pas être vide.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "L'ID utilisateur <%= userId %>, nom d'utilisateur \"<%= username %>\" a déjà une invitation en attente.", "userAlreadyInAParty": "L'ID utilisateur <%= userId %>, nom d'utilisateur \"<%= username %>\" est déjà dans une équipe.", "userWithIDNotFound": "Utilisateur avec l'ID \"<%= userId %>\" non trouvé.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "L'utilisateur n'a pas un enregistrement local (nom d'utilisateur, courriel, mot de passe).", "uuidsMustBeAnArray": "Les ID utilisateurs des invitations doivent être un tableau.", "emailsMustBeAnArray": "Les courriels des invitations doivent être un tableau.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Vous ne pouvez envoyer que \"<%= maxInvites %>\" invitations à la fois", "partyExceedsMembersLimit": "Une équipe ne peut contenir plus de <%= maxMembersParty %> membres", "onlyCreatorOrAdminCanDeleteChat": "Vous n'êtes pas autorisé à supprimer ce message !", @@ -361,6 +363,10 @@ "liked": "Apprécié", "joinGuild": "Rejoindre la guilde", "inviteToGuild": "Inviter dans la guilde", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Écrire au responsable de la guilde", "donateGems": "Offrir des gemmes", "updateGuild": "Mettre à jour la guilde", diff --git a/website/common/locales/fr/limited.json b/website/common/locales/fr/limited.json index 9c792e23db..4a44977ff5 100644 --- a/website/common/locales/fr/limited.json +++ b/website/common/locales/fr/limited.json @@ -25,7 +25,7 @@ "polarBearPup": "Ourson polaire", "jackolantern": "Citrouille d'Habitoween", "ghostJackolantern": "Citrouille d'Habitoween fantomatique", - "glowJackolantern": "Glow-in-the-Dark Jack-O-Lantern", + "glowJackolantern": "Citrouille d'Halloween Phosphorescente", "seasonalShop": "Boutique saisonnière", "seasonalShopClosedTitle": "<%= linkStart %>Leslie<%= linkEnd %>", "seasonalShopTitle": "<%= linkStart %>Sorcière saisonnière<%= linkEnd %>", diff --git a/website/common/locales/fr/messages.json b/website/common/locales/fr/messages.json index aa11b4a73d..8889fd6766 100644 --- a/website/common/locales/fr/messages.json +++ b/website/common/locales/fr/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Les numéros d'identification (ID) de notification sont requis.", "unallocatedStatsPoints": "Vous avez <%= points %> points d'attribut non alloués", "beginningOfConversation": "Ceci marque le commencement de votre conversation avec <%= userName %>. N´oubliez pas de communiquer avec politesse et respect, tout en suivant les règles de vie en communauté !", - "messageDeletedUser": "Désolé, cet utilisateur a supprimé son compte." + "messageDeletedUser": "Désolé, cet utilisateur a supprimé son compte.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/fr/npc.json b/website/common/locales/fr/npc.json index 5592ca9f75..0b083534bb 100644 --- a/website/common/locales/fr/npc.json +++ b/website/common/locales/fr/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "La bienvenue à", "welcomeBack": "Heureux de vous revoir !", "justin": "Justin", - "justinIntroMessage1": "Bonjour bonjour ! On dirait que vous venez tout juste d'arriver. Je m'appelle Justin, votre guide dans Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Pour commencer, vous aurez besoin d'un avatar.", "justinIntroMessage3": "Bravo ! Maintenant, que souhaiteriez-vous travailler pendant cette aventure ?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Et voilà ! Pour que vous puissiez commencer, j'ai créé quelques tâches à partir de vos centres d'intérêts. Cliquez sur une tâche pour l'éditer, ou créez-en de nouvelles pour perfectionner votre routine !", "prev": "Précédent", "next": "Suivant", diff --git a/website/common/locales/fr/settings.json b/website/common/locales/fr/settings.json index 2f6a0d5370..416ed282f7 100644 --- a/website/common/locales/fr/settings.json +++ b/website/common/locales/fr/settings.json @@ -125,7 +125,7 @@ "importantAnnouncements": "Rappels de connexion pour terminer des tâches et recevoir des récompenses", "weeklyRecaps": "Résumés de l'activité de votre compte durant la semaine passée (N.B. : ceci est actuellement désactivé suite à des problèmes de performance, mais nous espérons pouvoir rétablir bientôt l'envoi des courriels !)", "onboarding": "Aide à la configuration de votre compte Habitica", - "majorUpdates": "Important announcements", + "majorUpdates": "Annonces Importantes", "questStarted": "Votre quête a commencé", "invitedQuest": "Invitation à une quête", "kickedGroup": "Éjecté·e du groupe", @@ -157,7 +157,7 @@ "generate": "Générer", "getCodes": "Obtenir les Codes", "webhooks": "Webhooks", - "webhooksInfo": "Habitica provides webhooks so that when certain actions occur in your account, information can be sent to a script on another website. You can specify those scripts here. Be careful with this feature because specifying an incorrect URL can cause errors or slowness in Habitica. For more information, see the wiki's Webhooks page.", + "webhooksInfo": "Habitica propose des webhooks afin que lorsque certaines actions se produisent sur votre compte, celles-ci puissent être transmises à un script sur un autre site web. Vous pouvez définir ces scripts ici. Soyez prudent avec cette fonctionnalité, une URL incorrecte pouvant entraîner des erreurs ou des ralentissements sur Habitica. Pour plus d'informations, consultez la page Webhooks de notre wiki.", "enabled": "Activé", "webhookURL": "URL du webhook", "invalidUrl": "URL invalide", @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Les noms d'utilisateurs ne peuvent contenir que des lettres de a à z, des chiffres de 0 à 9, des tirets et des tirets bas.", "currentUsername": "Nom d'utilisateur actuel :", "displaynameIssueLength": "Les noms affichés doivent contenir entre 1 et 30 caractères.", - "displaynameIssueSlur": "Les noms affichés ne doivent pas contenir de mots grossiers", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Voir les paramètres", "usernameVerifiedConfirmation": "Votre nom d'utilisateur, <%= username %>, est confirmé !", "usernameNotVerified": "Veuillez confirmer votre nom d'utilisateur.", - "changeUsernameDisclaimer": "Nous allons effectuer une transition des noms de connexion à des noms d'utilisateur publics très bientôt. Ce nom d'utilisateur sera utilisé pour les invitations, les @mentions dans les discussion, et les messages." + "changeUsernameDisclaimer": "Nous allons effectuer une transition des noms de connexion à des noms d'utilisateur publics très bientôt. Ce nom d'utilisateur sera utilisé pour les invitations, les @mentions dans les discussion, et les messages.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/fr/subscriber.json b/website/common/locales/fr/subscriber.json index ad5079381b..bf20ced113 100644 --- a/website/common/locales/fr/subscriber.json +++ b/website/common/locales/fr/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Avez-vous un bon de réduction ?", "subscriptionAlreadySubscribedLeadIn": "Merci d'avoir souscrit un abonnement !", "subscriptionAlreadySubscribed1": "Pour voir les détails de l'abonnement et l'annuler, le renouveler ou le modifier, veuillez vous rendre surl'icône utilisateur > Paramètres > Abonnement.", - "purchaseAll": "Tout acheter", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Avec l'abonnement, vous pouvez acheter les gemmes pour de l'or au marché ! Pour un accès facile, vous pouvez aussi les épingler dans votre colonne Récompenses", "gemsRemaining": "gemmes restantes", "notEnoughGemsToBuy": "Vous ne pouvez pas acheter autant de gemmes." diff --git a/website/common/locales/fr/tasks.json b/website/common/locales/fr/tasks.json index 3683cdc23a..e2b60d545b 100644 --- a/website/common/locales/fr/tasks.json +++ b/website/common/locales/fr/tasks.json @@ -148,8 +148,8 @@ "taskAliasAlreadyUsed": "Le nom de cette tâche est déjà utilisé pour une autre tâche", "taskNotFound": "Tâche non trouvée.", "invalidTaskType": "Le type de tâche doit être : \"habit\", \"daily\", \"todo\" ou \"reward\".", - "invalidTasksType": "Le type de tâche doit être : \"habitudes\", \"quotidiennes\", \"à faire\" ou \"récompenses\".", - "invalidTasksTypeExtra": "Le type de tâche doit être : \"habitudes\", \"quotidiennes\", \"à faire\", \"récompenses\" ou \"accomplies\"", + "invalidTasksType": "Le type de tâche doit être \"habitudes\", \"quotidiennes\", \"à faire\" ou \"récompenses\".", + "invalidTasksTypeExtra": "Le type de tâche doit être \"habitudes\", \"quotidiennes\", \"à faire\", \"récompenses\" ou \"accomplies\"", "cantDeleteChallengeTasks": "Une tâche de défi ne peut pas être supprimée.", "checklistOnlyDailyTodo": "Les listes de vérification ne sont disponibles que sur les tâches quotidiennes et tâches à faire", "checklistItemNotFound": "Aucune liste de vérification n'a été trouvée pour l'ID fourni.", diff --git a/website/common/locales/he/character.json b/website/common/locales/he/character.json index 414ecf49b7..a7e0276ca7 100644 --- a/website/common/locales/he/character.json +++ b/website/common/locales/he/character.json @@ -7,7 +7,7 @@ "noPhoto": "האביטיקאן זה לא הוסיף תצלום", "other": "אחר", "fullName": "שם מלא", - "displayName": "שם תצוגה", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "תמונה", diff --git a/website/common/locales/he/front.json b/website/common/locales/he/front.json index b92f190f49..1707106702 100644 --- a/website/common/locales/he/front.json +++ b/website/common/locales/he/front.json @@ -271,15 +271,9 @@ "emailTaken": "כתובת המייל כבר בשימוש על ידי חשבון אחר.", "newEmailRequired": "חסרה כתובת מייל חדשה.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "אימות הסיסמה לא תואם את הסיסמה הראשונה.", "invalidLoginCredentials": "שם משתמש או מייל או סיסמה לא נכונים.", "passwordResetPage": "Reset Password", @@ -334,7 +328,7 @@ "joinMany": "Join over 2,000,000 people having fun while accomplishing their goals!", "joinToday": "Join Habitica Today", "signup": "Sign Up", - "getStarted": "Get Started", + "getStarted": "Get Started!", "mobileApps": "Mobile Apps", "learnMore": "Learn More" } \ No newline at end of file diff --git a/website/common/locales/he/generic.json b/website/common/locales/he/generic.json index bad222a0b4..32536029d9 100644 --- a/website/common/locales/he/generic.json +++ b/website/common/locales/he/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "User ID is required", "resetFilters": "Clear all filters", "applyFilters": "Apply Filters", + "wantToWorkOn": "I want to work on:", "categories": "Categories", "habiticaOfficial": "Habitica Official", "animals": "Animals", diff --git a/website/common/locales/he/groups.json b/website/common/locales/he/groups.json index 3906d25e8d..ad7e5ce8b3 100644 --- a/website/common/locales/he/groups.json +++ b/website/common/locales/he/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "הזמן חברים קיימים", "byColon": "על-ידי:", "inviteNewUsers": "הזמן משתמשים חדשים", - "sendInvitations": "שלח הזמנות", + "sendInvitations": "Send Invites", "invitationsSent": "הזמנות נשלחו!", "invitationSent": "הזמנה נשלחה!", "invitedFriend": "Invited a Friend", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "אינכם יכולים להסיר את עצמכם!", "groupMemberNotFound": "המשתמשים לא נמצאו מבין חברי הקבוצה", "mustBeGroupMember": "חייבים להיות חברים בקבוצה.", - "canOnlyInviteEmailUuid": "ניתן להזמין רק באמצעות זהות משתמש ייחודי או אימייל.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "חסרה כתובת אימייל בהזמנה.", "inviteMissingUuid": "Missing user id in invite", "inviteMustNotBeEmpty": "Invite must not be empty.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", "userWithIDNotFound": "משתמש/ת עם מספר זהות \"<%= userId %>\" לא נמצא/ה.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "למשתמש/ת אין רישום מקומי (שם משתמש, אימייל, סיסמה).", "uuidsMustBeAnArray": "הזמנות של מספר זהות משתמש/ת חייבות להיות מערך.", "emailsMustBeAnArray": "הזמנות של כתובת אימייל חייבות להיות מערך.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "ניתן להזמין רק \"<%= maxInvites %>\" בכל פעם", "partyExceedsMembersLimit": "Party size is limited to <%= maxMembersParty %> members", "onlyCreatorOrAdminCanDeleteChat": "אין לך הרשאה למחוק את ההודעה הזאת!", @@ -361,6 +363,10 @@ "liked": "Liked", "joinGuild": "Join Guild", "inviteToGuild": "Invite to Guild", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Message Guild Leader", "donateGems": "Donate Gems", "updateGuild": "Update Guild", diff --git a/website/common/locales/he/messages.json b/website/common/locales/he/messages.json index 731a010a0b..f860cd1315 100644 --- a/website/common/locales/he/messages.json +++ b/website/common/locales/he/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Notification ids are required.", "unallocatedStatsPoints": "You have <%= points %> unallocated Stat Points", "beginningOfConversation": "This is the beginning of your conversation with <%= userName %>. Remember to be kind, respectful, and follow the Community Guidelines!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/he/npc.json b/website/common/locales/he/npc.json index 82d16c6932..ab1397e889 100644 --- a/website/common/locales/he/npc.json +++ b/website/common/locales/he/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Welcome to", "welcomeBack": "Welcome back!", "justin": "ג'סטין", - "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, your guide to Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "To start, you'll need to create an avatar.", "justinIntroMessage3": "Great! Now, what are you interested in working on throughout this journey?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Here we are! I've filled out some Tasks for you based on your interests, so you can get started right away. Click a Task to edit or add new Tasks to fit your routine!", "prev": "Prev", "next": "Next", diff --git a/website/common/locales/he/settings.json b/website/common/locales/he/settings.json index 60ef8ae8ad..123b42f944 100644 --- a/website/common/locales/he/settings.json +++ b/website/common/locales/he/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/he/subscriber.json b/website/common/locales/he/subscriber.json index bb9ed40176..737cc18077 100644 --- a/website/common/locales/he/subscriber.json +++ b/website/common/locales/he/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "Thanks for subscribing!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Purchase All", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "gems remaining", "notEnoughGemsToBuy": "You are unable to buy that amount of gems" diff --git a/website/common/locales/hu/character.json b/website/common/locales/hu/character.json index 770df42bd3..0960f8a989 100644 --- a/website/common/locales/hu/character.json +++ b/website/common/locales/hu/character.json @@ -7,7 +7,7 @@ "noPhoto": "Ez a Habitica lakos még nem adott meg fotót.", "other": "Egyéb", "fullName": "Teljes név", - "displayName": "Nyilvános név", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Fotó", diff --git a/website/common/locales/hu/front.json b/website/common/locales/hu/front.json index 3375308722..6337f6afdf 100644 --- a/website/common/locales/hu/front.json +++ b/website/common/locales/hu/front.json @@ -271,15 +271,9 @@ "emailTaken": "Egy felhasználó már használja ezt az e-mail címet.", "newEmailRequired": "Hiányzó új e-mail cím.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "Jelszó megerősítés nem egyezik meg a jelszóval.", "invalidLoginCredentials": "Hibás felhasználó név és/vagy e-mail és/vagy jelszó.", "passwordResetPage": "Jelszó visszaállítás", @@ -334,7 +328,7 @@ "joinMany": "Csatlakozz a több mint 2.000.000 emberhez, akik a céljaikat szórakozva érik el!", "joinToday": "Csatlakozz a Habiticához ma!", "signup": "Regisztráció", - "getStarted": "Kezdj hozzá", + "getStarted": "Get Started!", "mobileApps": "Mobil alkalmazások", "learnMore": "Tudj meg többet" } \ No newline at end of file diff --git a/website/common/locales/hu/generic.json b/website/common/locales/hu/generic.json index 06426cb29c..3da21eb479 100644 --- a/website/common/locales/hu/generic.json +++ b/website/common/locales/hu/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Felhasználói azonosító szükséges", "resetFilters": "Címkék törlése", "applyFilters": "Címkék kiválasztása", + "wantToWorkOn": "I want to work on:", "categories": "Kategóriák", "habiticaOfficial": "Habitica hivatalos", "animals": "Állatok", diff --git a/website/common/locales/hu/groups.json b/website/common/locales/hu/groups.json index b0c8520336..a06518180a 100644 --- a/website/common/locales/hu/groups.json +++ b/website/common/locales/hu/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Létező felhasználó meghívása", "byColon": "Feladó:", "inviteNewUsers": "Új felhasználó meghívása", - "sendInvitations": "Meghívások elküldése", + "sendInvitations": "Send Invites", "invitationsSent": "Meghívások elküldve!", "invitationSent": "Meghívás elküldve!", "invitedFriend": "Meghívott egy barátot", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Nem távolíthatod el magad a csoportból!", "groupMemberNotFound": "Felhasználó nem található a csoport tagjai között", "mustBeGroupMember": "A csoport tagjai közé kell tartoznod.", - "canOnlyInviteEmailUuid": "Csak felhasználó azonosítón vagy email-en keresztül tudsz meghívást küldeni.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Hiányzó email cím a meghívóban.", "inviteMissingUuid": "Hiányzó felhasználói azonosító a meghívóban.", "inviteMustNotBeEmpty": "A meghívó nem lehet üres.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "Felhasználói azonosító: <%= userId %>, \"<%= username %>\" felhasználó meghívása függőben van.", "userAlreadyInAParty": "Felhasználói azonosító: <%= userId %>, \"<%= username %>\" felhasználó már a csapathoz tartozik.", "userWithIDNotFound": "Ez a felhasználó a \"<%= userId %>\" azonosítóval nem található.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Ez a felhasználó nincsen regisztrálva (felhasználónév, e-mail, jelszó).", "uuidsMustBeAnArray": "A felhasználói azonosítón keresztüli meghívásnak tömbnek kell lennie.", "emailsMustBeAnArray": "E-mail címen keresztüli meghívásnak tömbnek kell lennie.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Egyszerre csak \"<%= maxInvites %>\" meghívót lehet küldeni", "partyExceedsMembersLimit": "Tagok száma limitált <%= maxMembersParty %> felhasználóra", "onlyCreatorOrAdminCanDeleteChat": "Nincs felhatalmazásod hogy töröld ezt az üzenetet!", @@ -361,6 +363,10 @@ "liked": "Tetszett", "joinGuild": "Csatlakozz a céhhez", "inviteToGuild": "Meghívás a céhbe", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Üzenet küldése a céh vezetőjének", "donateGems": "Drágakövek ajándékozása", "updateGuild": "Céh frissítése", diff --git a/website/common/locales/hu/messages.json b/website/common/locales/hu/messages.json index 60c6005527..1221abba9b 100644 --- a/website/common/locales/hu/messages.json +++ b/website/common/locales/hu/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Értesítés azonosítók szükségesek.", "unallocatedStatsPoints": "Van <%= points %> kiosztatlan tulajdonság pontod", "beginningOfConversation": "Elkezdtél beszélgetni <%= userName %> felhasználóval. Ne felejtesd hogy legyél kedves, tisztelettudó és kövesd a közösségi irányelveket!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/hu/npc.json b/website/common/locales/hu/npc.json index a5bc2046cf..d16e9ca320 100644 --- a/website/common/locales/hu/npc.json +++ b/website/common/locales/hu/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Üdvözlünk a ", "welcomeBack": "Üdvözlünk újra!", "justin": "Justin", - "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, your guide to Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "To start, you'll need to create an avatar.", "justinIntroMessage3": "Great! Now, what are you interested in working on throughout this journey?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Here we are! I've filled out some Tasks for you based on your interests, so you can get started right away. Click a Task to edit or add new Tasks to fit your routine!", "prev": "Előző", "next": "Következő", diff --git a/website/common/locales/hu/settings.json b/website/common/locales/hu/settings.json index 2d7a5500bc..03a41e92f7 100644 --- a/website/common/locales/hu/settings.json +++ b/website/common/locales/hu/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/hu/subscriber.json b/website/common/locales/hu/subscriber.json index b25d37a350..407104bd9f 100644 --- a/website/common/locales/hu/subscriber.json +++ b/website/common/locales/hu/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Van kupon kódod?", "subscriptionAlreadySubscribedLeadIn": "Köszönjük az előfizetést", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Összes megvásárlása", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "drágakő maradt", "notEnoughGemsToBuy": "You are unable to buy that amount of gems" diff --git a/website/common/locales/id/character.json b/website/common/locales/id/character.json index b2c777bbe7..cd962dccb6 100644 --- a/website/common/locales/id/character.json +++ b/website/common/locales/id/character.json @@ -7,7 +7,7 @@ "noPhoto": "Habitican ini belum menambahkan foto apapun.", "other": "Lainnya", "fullName": "Nama Lengkap", - "displayName": "Nama Tampilan", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Foto", diff --git a/website/common/locales/id/front.json b/website/common/locales/id/front.json index 9167982c8e..4348dd7c37 100644 --- a/website/common/locales/id/front.json +++ b/website/common/locales/id/front.json @@ -271,15 +271,9 @@ "emailTaken": "Alamat email telah digunakan oleh akun lain.", "newEmailRequired": "Alamat email baru tidak ditemukan.", "usernameTime": "Ini waktunya untuk memilih nama penggunamu!", - "usernameInfo": "Nama tampilanmu tidak diganti, tetapi nama login lama-mu akan menjadi nama penguna publik-mu. Nama pengguna ini akan digunakan untuk undangan, @mention di obrolan, dan kirim-mengirim pesan singkat.

Jika kamu ingin mengetahui lebih lanjut tentang pergantian ini, kunjungi laman wiki Nama Pemain.", - "usernameTOSRequirements": "Nama pengguna harus mengikuti Persyaratan Layanan dan Pedoman Komunitas kami. Jika kamu belum pernah memilih nama login, nama penggunamu akan dibuat secara otomatis.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Nama pengguna sudah diambil.", - "usernameWrongLength": "Nama pengguna panjangnya harus di antara 1 hingga 20 karakter.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Nama pengguna hanya boleh terdiri dari huruf a sampai z, angka 0 sampai 9, tanda penghubung, atau garis bawah.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Konfirmasi Nama Pengguna", - "usernameConfirmed": "Nama Pengguna Dikonfirmasi", "passwordConfirmationMatch": "Konfirmasi kata sandi tidak cocok dengan kata sandi.", "invalidLoginCredentials": "Nama pengguna dan/atau email dan/atau kata sandi salah.", "passwordResetPage": "Reset Kata Sandi", @@ -334,7 +328,7 @@ "joinMany": "Bergabung dengan lebih dari 2.000.000 orang bersenang-senang selagi mencapai tujuan mereka!", "joinToday": "Bergabung dengan Habitica Hari Ini", "signup": "Daftar", - "getStarted": "Memulai", + "getStarted": "Get Started!", "mobileApps": "Aplikasi Handphone", "learnMore": "Pelajari Lebih Lanjut" } \ No newline at end of file diff --git a/website/common/locales/id/generic.json b/website/common/locales/id/generic.json index 5e47454ba4..215ed907ef 100644 --- a/website/common/locales/id/generic.json +++ b/website/common/locales/id/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "ID Pengguna dibutuhkan.", "resetFilters": "Bersihkan semua filter", "applyFilters": "Tambahkan Filter", + "wantToWorkOn": "I want to work on:", "categories": "Kategori", "habiticaOfficial": "Habitica Official", "animals": "Binatang", diff --git a/website/common/locales/id/groups.json b/website/common/locales/id/groups.json index 4ed4a4acd9..86e5f52cfc 100644 --- a/website/common/locales/id/groups.json +++ b/website/common/locales/id/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Undang Pengguna yang Sudah Ada", "byColon": "Oleh:", "inviteNewUsers": "Undang Pengguna Baru", - "sendInvitations": "Kirim Undangan", + "sendInvitations": "Send Invites", "invitationsSent": "Undangan terkirim!", "invitationSent": "Undangan terkirim!", "invitedFriend": "Telah mengundang Teman", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Kamu tidak dapat mengeluarkan dirimu sendiri!", "groupMemberNotFound": "Pengguna tidak ditemukan di antara anggota grup", "mustBeGroupMember": "Harus seorang anggota grup.", - "canOnlyInviteEmailUuid": "Hanya dapat mengundang menggunakan uuids atau email.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Alamat email belum ditulis.", "inviteMissingUuid": "User id belum ditulis", "inviteMustNotBeEmpty": "Undangan tidak boleh kosong.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" sudah diundang.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" sudah didalam kelompok.", "userWithIDNotFound": "Pengguna dengan id \"<%= userId %>\" tidak ditemukan.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Pengguna tidak memiliki registrasi lokal (nama pengguna, email, kata sandi).", "uuidsMustBeAnArray": "Undangan ID pengguna harus berupa array.", "emailsMustBeAnArray": "Undangan alamat email harus berupa array.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Kamu hanya dapat mengundang \"<%= maxInvites %>\" pada satu waktu", "partyExceedsMembersLimit": "Ukuran party memiliki batas <%= maxMembersParty %> anggota", "onlyCreatorOrAdminCanDeleteChat": "Tidak berhak untuk menghapus pesan ini!", @@ -361,6 +363,10 @@ "liked": "Disukai", "joinGuild": "Gabung Guild", "inviteToGuild": "Undang ke Guild", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Kirim Pesan ke Pemimpin Guild", "donateGems": "Sumbang Permata", "updateGuild": "Perbarui Guild", diff --git a/website/common/locales/id/messages.json b/website/common/locales/id/messages.json index 2ff2f96770..f8cabd95b1 100644 --- a/website/common/locales/id/messages.json +++ b/website/common/locales/id/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Id notifikasi diperlukan.", "unallocatedStatsPoints": "Kamu punya <%= points %>Poin Atribut yang belum teralokasi", "beginningOfConversation": "Ini permulaan percakapanmu dengan <%= userName %>. Ingatlah untuk menunjukkan rasa hormat, sikap baik hati, dan ikuti Pedoman Komunitas!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/id/npc.json b/website/common/locales/id/npc.json index 8a4bea40e1..ed5d63cb32 100644 --- a/website/common/locales/id/npc.json +++ b/website/common/locales/id/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Selamat datang di", "welcomeBack": "Selamat datang kembali!", "justin": "Justin", - "justinIntroMessage1": "Halo! Kamu pasti baru di sini. Nama saya Justin, pemandu kamu di Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Untuk memulai, kamu perlu membuat sebuah avatar.", "justinIntroMessage3": "Bagus! Sekarang, apa yang kamu mau perbaiki selama perjalanan ini?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Ini dia! Aku telah mengisi beberapa Tugas untukmu berdasarkan minatmu, jadi kamu dapat memulai langsung. Klik sebuah Tugas untuk mengedit atau tambahkan Tugas baru untuk menyesuaikan jadwalmu!", "prev": "Sebelum", "next": "Setelah", diff --git a/website/common/locales/id/settings.json b/website/common/locales/id/settings.json index ebaa4144a3..fac6470aac 100644 --- a/website/common/locales/id/settings.json +++ b/website/common/locales/id/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Nama pengguna hanya boleh mengandung huruf a hingga z, angka 0 sampai 9, tanda penghubung, atau garis bawah.", "currentUsername": "Nama pengguna sekarang:", "displaynameIssueLength": "Nama Tampilan harus di antara 1 hingga 30 karakter.", - "displaynameIssueSlur": "Nama Tampilan tidak boleh mengandung kata-kata kasar.", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Nama penggunamu, <%= username %>, telah dikonfirmasi!", "usernameNotVerified": "Silahkan konfirmasi nama penggunamu.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/id/subscriber.json b/website/common/locales/id/subscriber.json index 8b418122e9..b5f8c37f68 100644 --- a/website/common/locales/id/subscriber.json +++ b/website/common/locales/id/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Apakah kamu mempunyai kode kupon?", "subscriptionAlreadySubscribedLeadIn": "Terima kasih sudah berlangganan!", "subscriptionAlreadySubscribed1": "Untuk melihat detail berlanggananmu dan membatalkan, memperbarui atau mengubah pengaturan berlanggananmu, silakan klik Ikon Pengguna > Pengaturan > Berlangganan.", - "purchaseAll": "Beli Semuanya", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Pelanggan dapat membeli permata dengan koin emas di Pasar! Untuk akses mudah, kamu dapat juga menaruh permata ke kolom Hadiah-mu.", "gemsRemaining": "permata tersisa", "notEnoughGemsToBuy": "Kamu tidak dapat membeli permata sebanyak itu" diff --git a/website/common/locales/it/character.json b/website/common/locales/it/character.json index 3c98189297..60be92fbbc 100644 --- a/website/common/locales/it/character.json +++ b/website/common/locales/it/character.json @@ -7,7 +7,7 @@ "noPhoto": "Questo utente non ha aggiunto una foto.", "other": "Altro", "fullName": "Nome completo", - "displayName": "Nome pubblico", + "displayName": "Display name", "changeDisplayName": "Cambia Nome Pubblico", "newDisplayName": "Nuovo Nome Pubblico", "displayPhoto": "Foto", diff --git a/website/common/locales/it/front.json b/website/common/locales/it/front.json index 11a9613703..5d92ea2ebe 100644 --- a/website/common/locales/it/front.json +++ b/website/common/locales/it/front.json @@ -271,15 +271,9 @@ "emailTaken": "L'indirizzo email è già stato utilizzato per un altro account.", "newEmailRequired": "Manca il nuovo indirizzo e-mail.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Il Nome Pubblico deve comportare tra 1 e 30 caratteri.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "La password non corrisponde alla conferma.", "invalidLoginCredentials": "Nome utente e/o email e/o password scorretto/i.", "passwordResetPage": "Reimposta password", @@ -334,7 +328,7 @@ "joinMany": "Unisciti ad oltre 2 milioni di persone che si divertono raggiungendo i propri obiettivi!", "joinToday": "Unisciti ora ad Habitica", "signup": "Registrati", - "getStarted": "Inizia", + "getStarted": "Get Started!", "mobileApps": "App Mobile", "learnMore": "Maggiori informazioni" } \ No newline at end of file diff --git a/website/common/locales/it/gear.json b/website/common/locales/it/gear.json index 904e9622b2..fecc9bc314 100644 --- a/website/common/locales/it/gear.json +++ b/website/common/locales/it/gear.json @@ -342,26 +342,26 @@ "weaponArmoireHoofClippersNotes": "Spunta gli zoccoli delle tue cavalcature diligenti per aiutarle a restare in salute mentre ti trasportano verso l'avventura! Aumenta la Forza, l'Intelligenza e la Costituzione ciascuna di <%= attrs %>. Scrigno Incantato, set del Maniscalco (Oggetto 1 di 3). ", "weaponArmoireWeaversCombText": "Pettine del Tessitore", "weaponArmoireWeaversCombNotes": "Use this comb to pack your weft threads together to make a tightly woven fabric. Increases Perception by <%= per %> and Strength by <%= str %>. Enchanted Armoire: Weaver Set (Item 2 of 3).", - "weaponArmoireLamplighterText": "Lamplighter", + "weaponArmoireLamplighterText": "Lampionaio", "weaponArmoireLamplighterNotes": "This long pole has a wick on one end for lighting lamps, and a hook on the other end for putting them out. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Lamplighter's Set (Item 1 of 4)", - "weaponArmoireCoachDriversWhipText": "Coach Driver's Whip", - "weaponArmoireCoachDriversWhipNotes": "Your steeds know what they're doing, so this whip is just for show (and the neat snapping sound!). Increases Intelligence by <%= int %> and Strength by <%= str %>. Enchanted Armoire: Coach Driver Set (Item 3 of 3).", + "weaponArmoireCoachDriversWhipText": "Frusta del Vetturino", + "weaponArmoireCoachDriversWhipNotes": "I tuoi destrieri sanno cosa stanno facendo, quindi questa frusta è solo per spettacolo (e per i suoi suoni schioccanti!). Aumenta l'Intelligenza di <%= int %> e la Forza di <%= str %>. Scrigno Incantato: Set del Vetturino (Oggetto 3 di 3).", "weaponArmoireScepterOfDiamondsText": "Scettro di Diamanti", - "weaponArmoireScepterOfDiamondsNotes": "This scepter shines with a warm red glow as it grants you increased willpower. Increases Strength by <%= str %>. Enchanted Armoire: King of Diamonds Set (Item 3 of 4).", + "weaponArmoireScepterOfDiamondsNotes": "Questo scettro splende di un caldo e rosso bagliore concedendoti maggiore forza di volontà. Aumenta la Forza di <%= str %>. Scrigno incantato: Set del Re di Quadri (Oggetto 3 di 4).", "weaponArmoireFlutteryArmyText": "Esercito Svolazzante", "weaponArmoireFlutteryArmyNotes": "This group of scrappy lepidopterans is ready to flap fiercely and cool down your reddest tasks! Increases Constitution, Intelligence, and Strength by <%= attrs %> each. Enchanted Armoire: Fluttery Frock Set (Item 3 of 4).", - "weaponArmoireCobblersHammerText": "Cobbler's Hammer", + "weaponArmoireCobblersHammerText": "Martello del Calzolaio", "weaponArmoireCobblersHammerNotes": "This hammer is specially made for leatherwork. It can do a real number on a red Daily in a pinch, though. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 2 of 3).", - "weaponArmoireGlassblowersBlowpipeText": "Glassblower's Blowpipe", - "weaponArmoireGlassblowersBlowpipeNotes": "Use this tube to blow molten glass into beautiful vases, ornaments, and other fancy things. Increases Strength by <%= str %>. Enchanted Armoire: Glassblower Set (Item 1 of 4).", + "weaponArmoireGlassblowersBlowpipeText": "Pipa del Soffiatore di Vetro", + "weaponArmoireGlassblowersBlowpipeNotes": "Usa questo tubo per soffiare il vetro fuso e creare meravigliosi vasi, ornamenti e altre fantasiose cose. Aumenta la Forza di <%= str %>. Scrigno Incantato: Set del Soffiatore di Vetro (Oggetto 1 di 4).", "weaponArmoirePoisonedGobletText": "Calice Avvelenato", - "weaponArmoirePoisonedGobletNotes": "Use this to build your resistance to iocane powder and other inconceivably dangerous poisons. Increases Intelligence by <%= int %>. Enchanted Armoire: Piratical Princess Set (Item 3 of 4).", + "weaponArmoirePoisonedGobletNotes": "Usa questo per creare la tua resistenza alla polvere di iocaina e ad altre veleni inconcepibili. Aumenta l'Intelligenza di <%= int %>. Scrigno incantato: Set Principessa Pirata (Oggetto 3 di 4).", "weaponArmoireJeweledArcherBowText": "Arco Ingioiellato", - "weaponArmoireJeweledArcherBowNotes": "This bow of gold and gems will send your arrows to their targets at incredible speed. Increases Intelligence by <%= int %>. Enchanted Armoire: Jeweled Archer Set (Item 3 of 3).", + "weaponArmoireJeweledArcherBowNotes": "Questo arco d'oro pieno di gemme tirerà frecce ai suoi bersagli ad una velocità incredibile. Aumenta l'Intelligenza di <%= int %>. Scrigno Incantato: Set Arciere Ingioiellato (Oggetto 3 di 3).", "weaponArmoireNeedleOfBookbindingText": "Ago da Rilegatura", - "weaponArmoireNeedleOfBookbindingNotes": "You'd be surprised at how tough books can be. This needle can pierce right to the heart of your chores. Increases Strength by <%= str %>. Enchanted Armoire: Bookbinder Set (Item 3 of 4).", - "weaponArmoireSpearOfSpadesText": "Spear of Spades", - "weaponArmoireSpearOfSpadesNotes": "This knightly lance is perfect for attacking your reddest Habits and Dailies. Increases Constitution by <%= con %>. Enchanted Armoire: Ace of Spades Set (Item 3 of 3).", + "weaponArmoireNeedleOfBookbindingNotes": "Saresti sorpreso da quanto duri possono essere i libri. Questo ago può penetrare dritto al cuore delle tue faccende. Aumenta la Forza di <%= str %>. Scrigno Incantato: Set Rilegatore (Oggetto 3 di 4).", + "weaponArmoireSpearOfSpadesText": "Lancia di Picche", + "weaponArmoireSpearOfSpadesNotes": "Questa lancia cavalleresca è perfetta per attaccare le tue Abitudini e Daily più rosse. Aumenta la Costituzione di <%= con %>. Scrigno Incantato: Set Asso di Picche (Oggetto 3 di 3).", "armor": "armatura", "armorCapitalized": "Armatura", "armorBase0Text": "Vestiti semplici", @@ -413,7 +413,7 @@ "armorSpecial2Text": "Nobile Tunica di Jean Chalard", "armorSpecial2Notes": "Rende chi lo indossa estremamente morbido e peloso! Aumenta l'Intelligenza e la Costituzione di <%= attrs %>.", "armorSpecialTakeThisText": "Armatura Take This", - "armorSpecialTakeThisNotes": "This armor was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", + "armorSpecialTakeThisNotes": "Questa armatura è stata ottenuta partecipando ad una Sfida sponsorizzata da Take This. Congratulazioni! Aumenta tutte le Statistiche di <%= attrs %>.", "armorSpecialFinnedOceanicArmorText": "Armatura Oceanica con le Pinne", "armorSpecialFinnedOceanicArmorNotes": "Anche se delicata, quest'armatura rende la tua pelle dolorosa al tocco come un corallo di fuoco. Aumenta la Forza di <%= str %>.", "armorSpecialPyromancersRobesText": "Vesti del Piromante", @@ -439,7 +439,7 @@ "armorSpecialSamuraiArmorText": "Armatura da Samurai", "armorSpecialSamuraiArmorNotes": "Questa resistente armatura a scaglie è tenuta insieme da eleganti fili di seta. Aumenta la Percezione di <%= per %>.", "armorSpecialTurkeyArmorBaseText": "Armatura Tacchino", - "armorSpecialTurkeyArmorBaseNotes": "Keep your drumsticks warm and cozy in this feathery armor! Confers no benefit.", + "armorSpecialTurkeyArmorBaseNotes": "Mantieni le tue bacchette calde e confortevoli in questa armatura pennuta! Non conferisce alcun bonus.", "armorSpecialYetiText": "Veste dell'Addestra-Yeti", "armorSpecialYetiNotes": "Folta e feroce. Aumenta la Costituzione di <%= con %>. Edizione limitata, inverno 2013-2014.", "armorSpecialSkiText": "Parka del Nevassassino", @@ -606,10 +606,10 @@ "armorSpecialSummer2018HealerNotes": "These cerulean vestments reveal that you have land-walking feet... well. Not even a monarch can be expected to be perfect. Increases Constitution by <%= con %>. Limited Edition 2018 Summer Gear.", "armorSpecialFall2018RogueText": "Alter Ego Frock Coat", "armorSpecialFall2018RogueNotes": "Style for the day. Comfort and protection for the night. Increases Perception by <%= per %>. Limited Edition 2018 Autumn Gear.", - "armorSpecialFall2018WarriorText": "Minotaur Platemail", - "armorSpecialFall2018WarriorNotes": "Complete with hooves to drum a soothing cadence as you walk your meditative labyrinth. Increases Constitution by <%= con %>. Limited Edition 2018 Autumn Gear.", - "armorSpecialFall2018MageText": "Candymancer's Robes", - "armorSpecialFall2018MageNotes": "The fabric of these robes has magic candy woven right in! However, we recommend you not attempt to eat them. Increases Intelligence by <%= int %>. Limited Edition 2018 Autumn Gear.", + "armorSpecialFall2018WarriorText": "Armatura a Piastre da Minotauro", + "armorSpecialFall2018WarriorNotes": "Completa con gli zoccoli per tamburellare ad una cadenza calmante mentre cammini nel tuo labirinto meditativo. Aumenta la Costituzione di <%= con %>. Edizione limitata, autunno 2018.", + "armorSpecialFall2018MageText": "Vesti del Caramellomante", + "armorSpecialFall2018MageNotes": "Il tessuto di queste vesti è intrecciato proprio con delle caramelle! Tuttavia, ti consigliamo di non provare a mangiarle. Aumenta l'Intelligenza di <%= int %>. Edizione limitata, autunno 2018.", "armorSpecialFall2018HealerText": "Tunica Carnivora", "armorSpecialFall2018HealerNotes": "È fatta di piante, ma non significa che è vegetariana. Le cattive abitudini fuggiranno a chilometri da questa tunica. Aumenta la Costituzione di <%= con %>. Attrezzatura Autunnale in Edizione Limitata 2018.", "armorMystery201402Text": "Vesti del Messaggero", @@ -774,8 +774,8 @@ "armorArmoireCobblersCoverallsNotes": "These sturdy coveralls have lots of pockets for tools, leather scraps, and other useful items! Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 1 of 3).", "armorArmoireGlassblowersCoverallsText": "Glassblower's Coveralls", "armorArmoireGlassblowersCoverallsNotes": "These coveralls will protect you while you're making masterpieces with hot molten glass. Increases Constitution by <%= con %>. Enchanted Armoire: Glassblower Set (Item 2 of 4).", - "armorArmoireBluePartyDressText": "Blue Party Dress", - "armorArmoireBluePartyDressNotes": "You're perceptive, tough, smart, and so fashionable! Increases Perception, Strength, and Constitution by <%= attrs %> each. Enchanted Armoire: Blue Hairbow Set (Item 2 of 2).", + "armorArmoireBluePartyDressText": "Abito da Festa Blu", + "armorArmoireBluePartyDressNotes": "Sei così perspicace, duro, intelligente e così alla moda! Aumenta la Percezione, la Forza e la Costituzione di <%= attrs %>. Scrigno Incantato: Set del Fiocchetto Blu (Oggetto 2 di 2).", "armorArmoirePiraticalPrincessGownText": "Piratical Princess Gown", "armorArmoirePiraticalPrincessGownNotes": "This luxuriant garment has many pockets for concealing weapons and loot! Increases Perception by <%= per %>. Enchanted Armoire: Piratical Princess Set (Item 2 of 4).", "armorArmoireJeweledArcherArmorText": "Jeweled Archer Armor", diff --git a/website/common/locales/it/generic.json b/website/common/locales/it/generic.json index eeb27fea99..4f08ff7c09 100644 --- a/website/common/locales/it/generic.json +++ b/website/common/locales/it/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "L'ID Utente è richesto", "resetFilters": "Disattiva tutti i filtri", "applyFilters": "Applica filtri", + "wantToWorkOn": "I want to work on:", "categories": "Categorie", "habiticaOfficial": "Ufficiale Habitica", "animals": "Animali", diff --git a/website/common/locales/it/groups.json b/website/common/locales/it/groups.json index 84165368ed..abbb48b720 100644 --- a/website/common/locales/it/groups.json +++ b/website/common/locales/it/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Invita utenti esistenti", "byColon": "Da:", "inviteNewUsers": "Invita nuovi utenti", - "sendInvitations": "Spedisci inviti", + "sendInvitations": "Send Invites", "invitationsSent": "Inviti spediti!", "invitationSent": "Invito spedito!", "invitedFriend": "Invitato un amico", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Non puoi rimuovere te stesso!", "groupMemberNotFound": "Utente non trovato tra i membri del gruppo.", "mustBeGroupMember": "Deve essere membro del gruppo.", - "canOnlyInviteEmailUuid": "È possibile invitare solo con uuid o e-mail.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Indirizzo e-mail mancante nell'invito.", "inviteMissingUuid": "ID utente mancante nell'invito.", "inviteMustNotBeEmpty": "L'invito non può essere vuoto.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "ID Utente: <%= userId %>, Utente \"<%= username %>\" ha già un invito in attesa.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" è già in una squadra.", "userWithIDNotFound": "Utente con id \"<%= userId %>\" non trovato.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "L'utente non ha una registrazione locale (nome utente, e-mail, password).", "uuidsMustBeAnArray": "ID Utente deve essere un vettore", "emailsMustBeAnArray": "L' invito dell' Indirizzo email deve essere un vettore", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Puoi invitare solo \"<%= maxInvites %>\" alla volta", "partyExceedsMembersLimit": "La dimensione massima di una squadra è di <%= maxMembersParty %> membri.", "onlyCreatorOrAdminCanDeleteChat": "Non autorizzato a rimuovere questo messaggio!", @@ -361,6 +363,10 @@ "liked": "Ti piace", "joinGuild": "Unisciti alla Gilda", "inviteToGuild": "Invita alla Gilda", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Scrivi al Leader della Gilda", "donateGems": "Dona Gemme", "updateGuild": "Aggiorna GIlda", diff --git a/website/common/locales/it/messages.json b/website/common/locales/it/messages.json index ae5fc85901..5147a2f560 100644 --- a/website/common/locales/it/messages.json +++ b/website/common/locales/it/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Sono necessari gli id delle notifiche.", "unallocatedStatsPoints": "Hai <%= points %> Punti Statistica non allocati", "beginningOfConversation": "Stai iniziando una conversazione con <%= userName %>. Ricorda di scrivere con gentilezza e rispetto, seguendo le Linee guida della community!", - "messageDeletedUser": "Siamo spiacenti, questo utente ha eliminato il suo account." + "messageDeletedUser": "Siamo spiacenti, questo utente ha eliminato il suo account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/it/npc.json b/website/common/locales/it/npc.json index 6738aeabad..a6aef3a996 100644 --- a/website/common/locales/it/npc.json +++ b/website/common/locales/it/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Benvenuto in", "welcomeBack": "Bentornato!", "justin": "Justin", - "justinIntroMessage1": "Ciao! Devi essere nuovo qui. Mi chiamo Justin, la tua guida ad Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Per cominciare, hai bisogno di un avatar.", "justinIntroMessage3": "Bene! Ora, su cosa vorresti lavorare durante questo viaggio?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Eccoci qua! Ho creato alcune Attività basate sui tuoi interessi, così hai già qualcosa con cui partire. Clicca su un'Attività per modificarla oppure aggiungine di nuove!", "prev": "Prec", "next": "Succ", diff --git a/website/common/locales/it/settings.json b/website/common/locales/it/settings.json index f0ccb73e1f..4a01a9a124 100644 --- a/website/common/locales/it/settings.json +++ b/website/common/locales/it/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Gli username possono contenere solo lettere da a a z, numeri da 0 a 9, trattini e trattini bassi.", "currentUsername": "Username corrente:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Il tuo username, <%= username %>, è confermato!", "usernameNotVerified": "Per favore, conferma il tuo username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/it/subscriber.json b/website/common/locales/it/subscriber.json index ecdb7f5dc4..c96f75a1fe 100644 --- a/website/common/locales/it/subscriber.json +++ b/website/common/locales/it/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Hai un codice coupon?", "subscriptionAlreadySubscribedLeadIn": "Grazie per esserti abbonato/a!", "subscriptionAlreadySubscribed1": "Per vedere i dettagli del tuo abbonamento e cancellarlo, rinnovarlo o cambiarlo, vai a User icon > Settings > Subscription", - "purchaseAll": "Compra tutto", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Gli abbonati possono comprare gemme con oro nel Mercato! Per facile accesso ad esse, puoi anche fissare la Gemma alla tua colonna delle Ricompense.", "gemsRemaining": "gemme rimanenti", "notEnoughGemsToBuy": "Non puoi comprare quella quantità di gemme." diff --git a/website/common/locales/ja/character.json b/website/common/locales/ja/character.json index 59763b89c8..d96a4ceb7a 100644 --- a/website/common/locales/ja/character.json +++ b/website/common/locales/ja/character.json @@ -7,7 +7,7 @@ "noPhoto": "このHabitica の住民はまだ写真を追加していません。", "other": "その他", "fullName": "フルネーム", - "displayName": "表示名", + "displayName": "Display name", "changeDisplayName": "表示名を変更する", "newDisplayName": "新しい表示名", "displayPhoto": "写真", diff --git a/website/common/locales/ja/front.json b/website/common/locales/ja/front.json index 2fc2d34547..74a4a85f52 100644 --- a/website/common/locales/ja/front.json +++ b/website/common/locales/ja/front.json @@ -271,15 +271,9 @@ "emailTaken": "このメールアドレスは、すでに登録されています。", "newEmailRequired": "新しいメールアドレスがありません。", "usernameTime": "あなたのユーザー名を決める時間です!", - "usernameInfo": "あなたの表示名は変更されていません。しかし、あなたの古いログイン名はこれからあなたの公開のユーザーネームになります。このユーザーネームは、招待、チャットでの@返信、メッセージのやりとりなどに使われるでしょう。

もしこの変更についてより詳しく知りたいときは、wikiのPlayer Namesのページをご覧ください。", - "usernameTOSRequirements": "ユーザー名は、私たちのサービスの条項とコミュニティーガイドラインに従わなければなりません。もしあなたが以前にログイン名を設定していなかった場合、あなたのユーザー名は自動生成されました。", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "そのユーザー名は既に使われています", - "usernameWrongLength": "ユーザー名は1~20文字以内の長さでなくてはなりません。", - "displayNameWrongLength": "表示名は1~30文字以内の長さでなくてはなりません。", - "usernameBadCharacters": "ユーザー名に使える文字は、a~zの英字、0~9の数字、ハイフン、アンダーバーのみです。", - "nameBadWords": "名前に不適切な言葉を含めることはできません。", - "confirmUsername": "ユーザー名を承認する", - "usernameConfirmed": "ユーザー名が承認されました。", "passwordConfirmationMatch": "パスワードが不一致です。", "invalidLoginCredentials": "ユーザー名とパスワードのいずれかまたは両方が無効です。", "passwordResetPage": "パスワードをリセットする", @@ -334,7 +328,7 @@ "joinMany": "200万人以上のユーザーが目標達成しながら楽しんでいます! 一緒に参加しましょう!", "joinToday": "今日からHabiticaを始める", "signup": "登録する", - "getStarted": "今すぐ始める", + "getStarted": "Get Started!", "mobileApps": "モバイルアプリ", "learnMore": "もっと詳しく知る" } \ No newline at end of file diff --git a/website/common/locales/ja/generic.json b/website/common/locales/ja/generic.json index feb89186c2..8ee98982ee 100644 --- a/website/common/locales/ja/generic.json +++ b/website/common/locales/ja/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "ユーザー ID が必要です。", "resetFilters": "フィルターを元に戻す", "applyFilters": "フィルターを適用", + "wantToWorkOn": "I want to work on:", "categories": "カテゴリ", "habiticaOfficial": "Habitica 公式", "animals": "動物", diff --git a/website/common/locales/ja/groups.json b/website/common/locales/ja/groups.json index 03f9aab27b..280baf59e3 100644 --- a/website/common/locales/ja/groups.json +++ b/website/common/locales/ja/groups.json @@ -56,7 +56,7 @@ "invitedToPublicGuild": "<%= guild %> ギルドに招待されました。", "partyInvitationsText": "パーティーへの招待が <%= numberInvites %> 通届いています! パーティーは一度にひとつしか参加できないので、よく考えて選んでください。", "joinPartyConfirmationText": "本当に「<%= partyName %>」に参加しますか? パーティーは一度にひとつしか参加できません。参加すると、他のすべてのパーティーの招待を辞退することになります。", - "invitationAcceptedHeader": "招待が受けられました", + "invitationAcceptedHeader": "あなたの招待が承認されました。", "invitationAcceptedBody": "<%= username %> は、あなたからの <%= groupName %> への招待にこたえました。", "joinNewParty": "新しいパーティーに参加する", "declineInvitation": "招待を断る", @@ -183,10 +183,10 @@ "inviteExistUser": "既存のユーザーを招待する", "byColon": "で", "inviteNewUsers": "Habitica をつかってない人を招待する", - "sendInvitations": "招待状を送る", + "sendInvitations": "Send Invites", "invitationsSent": "招待状を送りました!", "invitationSent": "招待状を送りました!", - "invitedFriend": "友達を招待した", + "invitedFriend": "友達を招待しました", "invitedFriendText": "このユーザーは友人(または友人たち)を招待し、ともに冒険の旅に出ました!", "inviteAlertInfo2": "もしくはこのリンクを共有する(コピー/ペースト):", "inviteLimitReached": "あなたはemailでの招待の上限に達しました。これはスパムを防止するための制限であり、もし上限を増やしたい場合は <%= techAssistanceEmail %> にご連絡していただければ、喜んで対応いたします!", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "自分自身を削除することはできません!", "groupMemberNotFound": "グループのメンバーの中にユーザーが見つかりません。", "mustBeGroupMember": "グループのメンバーでなくてはなりません。", - "canOnlyInviteEmailUuid": "招待のあて先は、UUID かメールアドレスのみ対応しています。", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "招待の送り先メールアドレスが見つかりません。", "inviteMissingUuid": "招待の送り先ユーザーIDが見つかりません", "inviteMustNotBeEmpty": "招待は空のままでは受け付けません。", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, ユーザー \"<%= username %>\" はすでに招待への返事を保留しています。", "userAlreadyInAParty": "UserID: <%= userId %>, ユーザー \"<%= username %>\" はすでに他のパーティーの一員のようです.", "userWithIDNotFound": "ID が「<%= userId %>」のユーザーは見つかりません。", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "ユーザーはこのサーバーへの登録 ( ユーザー名、メールアドレス、パスワード ) がありません。", "uuidsMustBeAnArray": "ユーザーID を正確に入力してください。", "emailsMustBeAnArray": "メールアドレスを正確に入力してください。", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "一度に招待できるのは、<%= maxInvites %>人までです。", "partyExceedsMembersLimit": "パーティーの人数は<%= maxMembersParty %>人以下になります。", "onlyCreatorOrAdminCanDeleteChat": "このメッセージを削除する権限がありません。", @@ -361,6 +363,10 @@ "liked": "いいね済", "joinGuild": "ギルドに加入する", "inviteToGuild": "ギルドに招待する", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "ギルドリーダーにメッセージを送る", "donateGems": "ジェムを寄付する", "updateGuild": "ギルドの更新", diff --git a/website/common/locales/ja/messages.json b/website/common/locales/ja/messages.json index 7a73d2ee9a..0ad4bcb5a9 100644 --- a/website/common/locales/ja/messages.json +++ b/website/common/locales/ja/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "通知 ID が必要です。", "unallocatedStatsPoints": "<%= points %>ポイントが割り当てできます。", "beginningOfConversation": "<%= userName %>との会話の始まりです。相手に対して思いやりと敬意を持ち、コミュニティガイドラインを守ることを忘れないでください!", - "messageDeletedUser": "申し訳ありません。このユーザーはアカウントを削除しています。" + "messageDeletedUser": "申し訳ありません。このユーザーはアカウントを削除しています。", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/ja/npc.json b/website/common/locales/ja/npc.json index 4f8ac3d013..5a4c984844 100644 --- a/website/common/locales/ja/npc.json +++ b/website/common/locales/ja/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "ようこそ", "welcomeBack": "おかえりなさい!", "justin": "Justin", - "justinIntroMessage1": "こんにちは!あなたは新しくここに来た人ですね。私の名前はジャスティン、Habiticaの案内人です。", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "まず、アバターを作る必要があります。", "justinIntroMessage3": "素晴らしい!さて、あなたはこの旅路で何をしてみたいですか?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "さあどうぞ! あなたの関心に基づいたタスクをいくつかご用意しました。これで今すぐ始められます。タスクをクリックして編集するか、あるいは習慣に合った新しいタスクを追加しましょう!", "prev": "前へ", "next": "次へ", diff --git a/website/common/locales/ja/settings.json b/website/common/locales/ja/settings.json index c4e7ae9248..fc97c176a0 100644 --- a/website/common/locales/ja/settings.json +++ b/website/common/locales/ja/settings.json @@ -125,7 +125,7 @@ "importantAnnouncements": "タスクの完了し、賞を受けるために、チェックインを通知します。", "weeklyRecaps": "先週の活動概要 (注 : この機能は、現在パフォーマンスの問題が発生し無効になっています。しかし、なるべく早くこの問題を解決し、メールが送れることを願っています!)", "onboarding": "あなたのHabiticaアカウントの設定の手引き", - "majorUpdates": "Important announcements", + "majorUpdates": "大切なお知らせ", "questStarted": "あなたのクエストがはじまりました", "invitedQuest": "クエストへ招待されました", "kickedGroup": "グループから追い出されました", @@ -157,7 +157,7 @@ "generate": "生成する", "getCodes": "コードを取得する", "webhooks": "Webhook", - "webhooksInfo": "Habitica provides webhooks so that when certain actions occur in your account, information can be sent to a script on another website. You can specify those scripts here. Be careful with this feature because specifying an incorrect URL can cause errors or slowness in Habitica. For more information, see the wiki's Webhooks page.", + "webhooksInfo": "あなたのアカウントで特定のアクションが発生したときに、別のウェブサイトのスクリプトへ情報が送信できるように、Habiticaはウェブフックを提供しています。ここでそれらのスクリプトを指定することができます。間違ったURLを指定してしまうとHabiticaでのエラーや遅延の原因になるため、この機能を用いるときはご注意ください。より詳しく知りたいときは、wikiの Webhooks ページをご覧ください。", "enabled": "有効", "webhookURL": "Webhook URL", "invalidUrl": "無効な Url", @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "ユーザー名に使える文字は、a~zの英字、0~9の数字、ハイフン、アンダーバーのみです。", "currentUsername": "現在のユーザー名", "displaynameIssueLength": "表示名は1~30文字以内でなくてはなりません。", - "displaynameIssueSlur": "表示名に不適切な言葉を含めることはできません。", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "設定を行う", "usernameVerifiedConfirmation": "あなたのユーザー名、<%= username %>、は承認されました!", "usernameNotVerified": "あなたのユーザー名を承認してください。", - "changeUsernameDisclaimer": "私たちはもうすぐログイン名を、固有の、公開のユーザー名に移行します。このユーザー名は、招待、チャットでの@返信、メッセージのやりとりなどで使用されます。" + "changeUsernameDisclaimer": "私たちはもうすぐログイン名を、固有の、公開のユーザー名に移行します。このユーザー名は、招待、チャットでの@返信、メッセージのやりとりなどで使用されます。", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/ja/subscriber.json b/website/common/locales/ja/subscriber.json index 0d7c421bec..86d3f0ef7f 100644 --- a/website/common/locales/ja/subscriber.json +++ b/website/common/locales/ja/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "クーポンコードを持っていますか?", "subscriptionAlreadySubscribedLeadIn": "寄付に感謝します!", "subscriptionAlreadySubscribed1": "寄付の詳細を確認したり、寄付会員の中止・更新・変更をしたりするには、ユーザーアイコン > 設定 > 寄付 を参照してください。", - "purchaseAll": "すべて購入", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "寄付会員はゴールドを使って、市場でジェムを購入できます! 購入しやすくするために、ごほうび欄にジェムをピン留めすることも可能です。", "gemsRemaining": "残りのジェム", "notEnoughGemsToBuy": "その量のジェムを買うことはできません。" diff --git a/website/common/locales/nl/backgrounds.json b/website/common/locales/nl/backgrounds.json index 667af52209..ea6eb09258 100644 --- a/website/common/locales/nl/backgrounds.json +++ b/website/common/locales/nl/backgrounds.json @@ -381,18 +381,18 @@ "backgroundGiantBookNotes": "Lees terwijl je door de pagina's van een Reuzen Boek gaat.", "backgroundCozyBarnText": "Gezellige Schuur", "backgroundCozyBarnNotes": "Ontspan met je dieren en rijdieren in hun gezellige schuur", - "backgrounds102018": "SET 53: Released October 2018", - "backgroundBayouText": "Bayou", + "backgrounds102018": "SET 53: Uitgebracht Oktober 2018", + "backgroundBayouText": "Rivierdelta", "backgroundBayouNotes": "Bask in the fireflies' glow on the misty Bayou.", "backgroundCreepyCastleText": "Eng Kasteel", "backgroundCreepyCastleNotes": "Dare to approach a Creepy Castle.", "backgroundDungeonText": "Kerker", - "backgroundDungeonNotes": "Rescue the prisoners of a spooky Dungeon.", + "backgroundDungeonNotes": "Red de gevangenen uit een spookachtige kerker. ", "backgrounds112018": "SET 54: Released November 2018", "backgroundBackAlleyText": "Back Alley", "backgroundBackAlleyNotes": "Look shady loitering in a Back Alley.", - "backgroundGlowingMushroomCaveText": "Glowing Mushroom Cave", + "backgroundGlowingMushroomCaveText": "Gloeiende Paddenstoelengrot ", "backgroundGlowingMushroomCaveNotes": "Stare in awe at a Glowing Mushroom Cave.", - "backgroundCozyBedroomText": "Cozy Bedroom", + "backgroundCozyBedroomText": "Knusse Slaapkamer", "backgroundCozyBedroomNotes": "Curl up in a Cozy Bedroom." } \ No newline at end of file diff --git a/website/common/locales/nl/character.json b/website/common/locales/nl/character.json index fdea6a6c5b..2e81f7fade 100644 --- a/website/common/locales/nl/character.json +++ b/website/common/locales/nl/character.json @@ -7,7 +7,7 @@ "noPhoto": "Deze Habiticaan heeft geen foto toegevoegd.", "other": "Overige", "fullName": "Volledige naam", - "displayName": "Weergegeven naam", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Foto", diff --git a/website/common/locales/nl/front.json b/website/common/locales/nl/front.json index 5b4a6e3433..add17b0a6f 100644 --- a/website/common/locales/nl/front.json +++ b/website/common/locales/nl/front.json @@ -271,15 +271,9 @@ "emailTaken": "E-mailadres is al in gebruik door een account.", "newEmailRequired": "Ontbrekend nieuw e-mailadres.", "usernameTime": "Het is tijd om je gebruikersnaam in te stellen!", - "usernameInfo": "Je weergavenaam is niet veranderd, maar je oude inlognaam zal nu je openbare gebruikersnaam worden. Deze gebruikersnaam zal worden gebruikt voor uitnodigingen, @mentions in de chat en het sturen van berichten.

Als je meer wilt leren over deze verandering, bezoek dan de wiki's Gebruikersnaam pagina.", - "usernameTOSRequirements": "Gebruikersnamen moeten voldoen aan de Servicevoorwaarden en Gemeenschapsrichtlijnen. Als je niet eerder een inlognaam hebt ingesteld, dan is jouw gebruikersnaam automatisch gegenereerd. ", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Gebruikersnaam reeds in gebruik.", - "usernameWrongLength": "Gebruikersnaam moet tussen de 1 en 20 tekens lang zijn. ", - "displayNameWrongLength": "Weergave-namen moeten tussen de 1 en 30 tekens lang zijn. ", - "usernameBadCharacters": "Gebruikersnamen mogen alleen de letters a tot z, nummers 0 tot 9, koppeltekens of lage strepen bevatten. ", - "nameBadWords": "Namen mogen geen ongepaste woorden bevatten. ", - "confirmUsername": "Bevestig gebruikersnaam", - "usernameConfirmed": "Gebruikersnaam bevestigd", "passwordConfirmationMatch": "Wachtwoordconfirmatie komt niet overeen met wachtwoord.", "invalidLoginCredentials": "Incorrecte gebruikersnaam en/of e-mail en/of wachtwoord.", "passwordResetPage": "Reset je wachtwoord", @@ -334,7 +328,7 @@ "joinMany": "Sluit je aan bij 2 000 000 mensen die plezier hebben tijdens het verwezelijken van hun doelen!", "joinToday": "Doe vandaag mee met Habitica", "signup": "Aanmelden", - "getStarted": "Begin", + "getStarted": "Get Started!", "mobileApps": "Mobiele apps", "learnMore": "Meer informatie" } \ No newline at end of file diff --git a/website/common/locales/nl/gear.json b/website/common/locales/nl/gear.json index 88545380a9..368186752e 100644 --- a/website/common/locales/nl/gear.json +++ b/website/common/locales/nl/gear.json @@ -267,7 +267,7 @@ "weaponSpecialSummer2018HealerText": "Merfolk Monarch Trident", "weaponSpecialSummer2018HealerNotes": "With a benevolent gesture, you command healing water to flow through your dominions in waves. Increases Intelligence by <%= int %>. Limited Edition 2018 Summer Gear.", "weaponSpecialFall2018RogueText": "Vial of Clarity", - "weaponSpecialFall2018RogueNotes": "When you need to come back to your senses, when you need a little boost to make the right decision, take a deep breath and a sip. It'll be OK! Increases Strength by <%= str %>. Limited Edition 2018 Autumn Gear.", + "weaponSpecialFall2018RogueNotes": "Wanneer je weer bij zinnen moet komen, wanneer je een kleine boost nodig hebt om de juiste beslissing te nemen, haal diep adem en neem een slok. Het komt wel goed! Verhoogt kracht met <%= str %>. Beperkte Editie 2018 Herfstuitrusting. ", "weaponSpecialFall2018WarriorText": "Zweep van Minos", "weaponSpecialFall2018WarriorNotes": "Not quite long enough to unwind behind you for keeping your bearings in a maze. Well, maybe a very small maze. Increases Strength by <%= str %>. Limited Edition 2018 Autumn Gear.", "weaponSpecialFall2018MageText": "Staf van Zoetheid", diff --git a/website/common/locales/nl/generic.json b/website/common/locales/nl/generic.json index 22b0583c7d..7a651635e3 100644 --- a/website/common/locales/nl/generic.json +++ b/website/common/locales/nl/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Gebruikers ID is vereist", "resetFilters": "verwijder alle filters", "applyFilters": "pas filters toe", + "wantToWorkOn": "I want to work on:", "categories": "Categorieën", "habiticaOfficial": "Habitica Official", "animals": "Dieren", diff --git a/website/common/locales/nl/groups.json b/website/common/locales/nl/groups.json index a84e3d1ef6..8e4fb60e44 100644 --- a/website/common/locales/nl/groups.json +++ b/website/common/locales/nl/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Bestaande gebruikers uitnodigen", "byColon": "Door:", "inviteNewUsers": "Nieuwe gebruikers uitnodigen", - "sendInvitations": "Uitnodigingen versturen", + "sendInvitations": "Send Invites", "invitationsSent": "Uitnodigingen verstuurd!", "invitationSent": "Uitnodiging verstuurd!", "invitedFriend": "Een vriend uitgenodigd", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Je kunt jezelf niet verwijderen!", "groupMemberNotFound": "Gebruiker is niet gevonden tussen de leden van de groep.", "mustBeGroupMember": "Je moet lid zijn van de groep.", - "canOnlyInviteEmailUuid": "Je kunt alleen uitnodigen via uuids of e-mails.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Ontbrekende e-mailadressen in de uitnodiging.", "inviteMissingUuid": "De gebruikers-ID ontbreekt in de uitnodiging", "inviteMustNotBeEmpty": "De uitnodiging mag niet leeg zijn.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", "userWithIDNotFound": "Gebruiker met id \"<%= userId %>\" niet gevonden.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "De gebruiker heeft geen lokale registratie (gebruikersnaam, e-mail, wachtwoord).", "uuidsMustBeAnArray": "Gebruikers-ID-uitnodigingen moeten een array zijn.", "emailsMustBeAnArray": "E-mailadres-uitnodigingen moeten een array zijn. ", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Je kunt er slechts \"<%= maxInvites %>\" uitnodigen per keer", "partyExceedsMembersLimit": "Grootte van het gezelschap is beperkt tot <%= maxMembersParty %> leden", "onlyCreatorOrAdminCanDeleteChat": "Niet gemachtigd om dit bericht te verwijderen!", @@ -361,6 +363,10 @@ "liked": "Leuk vinden", "joinGuild": "Lid worden van een gilde", "inviteToGuild": "Uitnodigen voor gilde", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Gildeleider een bericht sturen", "donateGems": "Edelstenen doneren", "updateGuild": "Gilde updaten", diff --git a/website/common/locales/nl/messages.json b/website/common/locales/nl/messages.json index 9543be232c..5a0f83c26a 100644 --- a/website/common/locales/nl/messages.json +++ b/website/common/locales/nl/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Notificatie-id's zijn vereist.", "unallocatedStatsPoints": "Je hebt <%= points %> niet toegekende statuspunten", "beginningOfConversation": "Dit is het begin van je gesprek met <%= userName %>. Denk eraan aardig en respectvol te zijn en de gemeenschapsrichtlijnen te volgen!", - "messageDeletedUser": "Soory, deze gebruiker heeft zijn account verwijderd." + "messageDeletedUser": "Soory, deze gebruiker heeft zijn account verwijderd.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/nl/npc.json b/website/common/locales/nl/npc.json index 2747caa2c1..512a061032 100644 --- a/website/common/locales/nl/npc.json +++ b/website/common/locales/nl/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Welkom bij", "welcomeBack": "Welkom terug!", "justin": "Justin", - "justinIntroMessage1": "Hallo daar! Jij bent vast nieuw hier. Mijn naam is Justin, je gids in Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Om te beginnen moet je een avatar aanmaken.", "justinIntroMessage3": "Geweldig! Waar zou je aan willen werken tijdens deze reis?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Hier zijn we dan! Ik heb enkele Taken voor je ingevuld gebaseerd op je interesses, je kan dus meteen aan de slag. Klik op een Taak om deze te bewerken of voeg een nieuwe Taak toe die in je routine past!", "prev": "Vorige", "next": "Volgende", diff --git a/website/common/locales/nl/settings.json b/website/common/locales/nl/settings.json index 646045a4bd..0a3934f91c 100644 --- a/website/common/locales/nl/settings.json +++ b/website/common/locales/nl/settings.json @@ -96,7 +96,7 @@ "passwordChangeSuccess": "Je wachtwoord is succesvol veranderd naar degene die je net gekozen hebt. Je kunt deze nu gebruiken op toegang te krijgen tot je account.", "passwordSuccess": "Wachtwoord succesvol aangepast", "usernameSuccess": "Gebruikersnaam succesvol gewijzigd", - "displayNameSuccess": "Display name successfully changed", + "displayNameSuccess": "Weergavenaam is succesvol veranderd", "emailSuccess": "E-mailadres succesvol aangepast", "detachSocial": "De-registreer <%= network %>", "detachedSocial": "<%= network %> authenticatie succesvol verwijderd van je account", @@ -125,7 +125,7 @@ "importantAnnouncements": "Herinnering om in te checken om taken te voltooien en prijzen te ontvangen.", "weeklyRecaps": "Samenvatting van je account-activiteit van de afgelopen week (Opmerking: dit is tijdelijk uitgeschakeld vanwege prestatieproblemen, maar we hopen dit snel weer online te hebben en e-mails kunnen sturen!)", "onboarding": "Hulp bij het opzetten van je Habitica account", - "majorUpdates": "Important announcements", + "majorUpdates": "Belangrijke mededelingen", "questStarted": "Je queeste is begonnen", "invitedQuest": "Uitgenodigd voor queeste", "kickedGroup": "Uit de groep gezet", @@ -192,17 +192,18 @@ "timezoneInfo": "Als die tijdzone fout is, laad dan eerst deze pagina opnieuw met je browsers herlaad- of verversknop om er zeker van te zijn dat Habitica de meest recente informatie heeft. Als het nog steeds fout is, pas dan de tijdzone op je PC aan en herlaad opnieuw deze pagina.

Als je Habitica op andere PC's of mobiele apparaten gebruikt, dan moet de tijdzone overal hetzelfde zijn. Als je dagelijkse taken op de verkeerde tijd zijn gereset, herhaal dan deze controle op alle andere PC's en in een browser op je mobiele apparaat.", "push": "Push", "about": "Over", - "setUsernameNotificationTitle": "Confirm your username!", + "setUsernameNotificationTitle": "Bevestig je gebruikersnaam!", "setUsernameNotificationBody": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", - "usernameIssueSlur": "Usernames may not contain inappropriate language.", + "usernameIssueSlur": "Gebruikersnamen mogen geen ongepaste taal bevatten.", "usernameIssueForbidden": "Usernames may not contain restricted words.", - "usernameIssueLength": "Usernames must be between 1 and 20 characters.", + "usernameIssueLength": "Gebruikersnaam moet tussen de 1 en 20 tekens lang zijn.", "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "currentUsername": "Current username:", - "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "currentUsername": "Huidige gebruikersnaam: ", + "displaynameIssueLength": "Weergavenamen moeten tussen de 1 en 30 tekens lang zijn.", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Ga naar instellingen", - "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", - "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "usernameVerifiedConfirmation": "Jouw gebruikersnaam, <%= username %>, is bevestigd!", + "usernameNotVerified": "Bevestig alsjeblieft je gebruikersnaam.", + "changeUsernameDisclaimer": "Wij gaan binnenkort over op unieke, publieke gebruikersnamen. Deze gebruikersnaam zal gebruikt worden bij uitnodigingen, @mentions in de chat en het sturen van berichten.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/nl/subscriber.json b/website/common/locales/nl/subscriber.json index 6b02886bea..1e6e073251 100644 --- a/website/common/locales/nl/subscriber.json +++ b/website/common/locales/nl/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Heb je een coupon code?", "subscriptionAlreadySubscribedLeadIn": "Bedankt voor het abonneren!", "subscriptionAlreadySubscribed1": "Om je abonnement details te zien en het afzeggen, vernieuwen of veranderen van je abonnenment, ga dan naar Gebruikers icoon > Instellingen > Abonnement.", - "purchaseAll": "Koop alles", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Abonnees kunnen Edelstenen voor Goud kopen in de Markt! Voor gemakkelijke toegang, kan je de Edelsteen ook aan je Beloningskolom vastmaken.", "gemsRemaining": "resterende Edelstenen", "notEnoughGemsToBuy": "Je bent niet in staat om die hoeveelheid Edelstenen te kopen" diff --git a/website/common/locales/pl/character.json b/website/common/locales/pl/character.json index 1142e2957d..6b39c29166 100644 --- a/website/common/locales/pl/character.json +++ b/website/common/locales/pl/character.json @@ -7,7 +7,7 @@ "noPhoto": "Ten użytkownik nie dodał zdjęcia.", "other": "Inne", "fullName": "Pełne imię", - "displayName": "Nazwa gracza", + "displayName": "Display name", "changeDisplayName": "Zmiana nazwy gracza", "newDisplayName": "Nowa nazwa gracza", "displayPhoto": "Zdjęcie", diff --git a/website/common/locales/pl/front.json b/website/common/locales/pl/front.json index c0051a2aed..afa6b9d2b4 100644 --- a/website/common/locales/pl/front.json +++ b/website/common/locales/pl/front.json @@ -271,15 +271,9 @@ "emailTaken": "Adres e-mail jest już używany.", "newEmailRequired": "Brakuje nowego adresu e-mail.", "usernameTime": "Nadszedł czas aby podać nazwę użytkownika!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Nazwa użytkownika jest już zajęta", - "usernameWrongLength": "Nazwa użytkownika musi zawierać od 1 do 20 znaków.", - "displayNameWrongLength": "Nazwy graczy muszą zawierać od 1 do 30 znaków.", - "usernameBadCharacters": "Nazwy użytkowników mogą zawierać wyłącznie litery od a do z, cyfry od 0 do 9, myślniki lub podkreślenia.", - "nameBadWords": "Nazwy nie mogą zawierać wulgaryzmów.", - "confirmUsername": "Potwierdź nazwę użytkownika", - "usernameConfirmed": "Potwierdzona Nazwa użytkownika", "passwordConfirmationMatch": "Potwierdzenie hasła nie jest identyczne z hasłem.", "invalidLoginCredentials": "Błędna nazwa użytkownika i/lub e-mail i/lub hasło", "passwordResetPage": "Zresetuj hasło", @@ -334,7 +328,7 @@ "joinMany": "Dołącz do 2,000,000 osób, które bawią się osiągając cele!", "joinToday": "Dołącz do Habitica już dziś", "signup": "Zarejestruj się", - "getStarted": "Rozpocznij", + "getStarted": "Get Started!", "mobileApps": "Aplikacje mobilne", "learnMore": "Dowiedz się więcej" } \ No newline at end of file diff --git a/website/common/locales/pl/generic.json b/website/common/locales/pl/generic.json index 26f1d40654..ffd819ff63 100644 --- a/website/common/locales/pl/generic.json +++ b/website/common/locales/pl/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Wymagane ID użytkownika", "resetFilters": "Wyczyść wszystkie filtry", "applyFilters": "Zastosuj Filtry", + "wantToWorkOn": "I want to work on:", "categories": "Kategorie", "habiticaOfficial": "Oficjalne wyzwania Habitica", "animals": "Zwierzęta", diff --git a/website/common/locales/pl/groups.json b/website/common/locales/pl/groups.json index c83a38e937..852c9acb6b 100644 --- a/website/common/locales/pl/groups.json +++ b/website/common/locales/pl/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Zaproś istniejących użytkowników", "byColon": "Przez:", "inviteNewUsers": "Zaproś nowych użytkowników", - "sendInvitations": "Wyślij zaproszenia", + "sendInvitations": "Send Invites", "invitationsSent": "Zaproszenia wysłane!", "invitationSent": "Zaproszenie wysłane!", "invitedFriend": "Zaproszono znajomego", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Nie możesz usunąć siebie!", "groupMemberNotFound": "Użytkownik nie znaleziony wśród członków grupy", "mustBeGroupMember": "Musi być członkiem grupy.", - "canOnlyInviteEmailUuid": "Można zapraszać jedynie używając UUID lub adresu e-mail.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Brakujący adres e-mail w zaproszeniu.", "inviteMissingUuid": "Brakujący identyfikator użytkownika w zaproszeniu", "inviteMustNotBeEmpty": "Zaproszenie nie może być puste.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "ID Użytkownika: <%= userId %>, \"<%= username %>\" już oczekuje na zaproszenie.", "userAlreadyInAParty": "ID Użytkownika: <%= userId %>, Użytkownik \"<%= username %>\" już jest w drużynie.", "userWithIDNotFound": "Nie znaleziono użytkownika o numerze ID „<%= userId %>”.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Użytkownik nie ma lokalnej rejestracji (nazwa użytkownika, email, hasło).", "uuidsMustBeAnArray": "Zaproszenia ID Użytkownika muszą być tablicą.", "emailsMustBeAnArray": "Zaproszenia adresu e-mail muszą być tablicą.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Możesz zaprosić jednocześnie nie więcej niż <%= maxInvites %> osób.", "partyExceedsMembersLimit": "Rozmiar drużyny jest ograniczony do <%= maxMembersParty %> członków", "onlyCreatorOrAdminCanDeleteChat": "Nie masz uprawnień do usunięcia tej wiadomości!", @@ -361,6 +363,10 @@ "liked": "Lubisz to", "joinGuild": "Dołącz do Gildii", "inviteToGuild": "Zaproś do Gildii", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Napisz wiadomość do przywódcy gildii", "donateGems": "Podaruj klejnoty", "updateGuild": "Zaktualizuj Gildię", diff --git a/website/common/locales/pl/messages.json b/website/common/locales/pl/messages.json index 63a12dcf6b..efb1f4cc43 100644 --- a/website/common/locales/pl/messages.json +++ b/website/common/locales/pl/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Wymagane są identyfikatory powiadomienia", "unallocatedStatsPoints": "Masz nieprzydzielone Punkty Atrybutów: <%= points %>", "beginningOfConversation": "To początek Twojej konwersacji z <%= userName %>. Pamiętaj, aby być miłym, odnosić się z szacunkiem i przestrzegać Wytycznych Społeczności!", - "messageDeletedUser": "Niestety, ten użytkownik usunął już swoje konto." + "messageDeletedUser": "Niestety, ten użytkownik usunął już swoje konto.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/pl/npc.json b/website/common/locales/pl/npc.json index 61aa67b32a..8ffcfe4bac 100644 --- a/website/common/locales/pl/npc.json +++ b/website/common/locales/pl/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Witamy w", "welcomeBack": "Witaj ponownie!", "justin": "Justin", - "justinIntroMessage1": "Witaj! Chyba jesteś tu nowy. Nazywam się Justin i będę Twoim przewodnikiem po świecie Habitiki.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Na początku musisz stworzyć swój awatar.", "justinIntroMessage3": "Świetnie! Teraz powiedz: nad czym chcesz pracować podczas swojej podróży? ", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Oto jesteśmy! Wypełniłem Twoje Zadania bazując na Twoich zainteresowaniach tak że możesz od razu zaczynać. Naciśnij Zadanie aby je edytować albo dodaj nowe Zadania by wpasować je w swój tryb życia!", "prev": "Poprzedni", "next": "Następny", diff --git a/website/common/locales/pl/settings.json b/website/common/locales/pl/settings.json index 0f06ef8c52..e9e6787763 100644 --- a/website/common/locales/pl/settings.json +++ b/website/common/locales/pl/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Nazwy użytkowników mogą zawierać wyłącznie litery od a do z, cyfry od 0 do 9, myślniki lub podkreślenia.", "currentUsername": "Aktualna nazwa użytkownika:", "displaynameIssueLength": "Nazwy Graczy muszą zawierać od 1 do 30 znaków.", - "displaynameIssueSlur": "Nazwy Graczy nie mogą zawierać wulgaryzmów", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Przejdź do ustawień", "usernameVerifiedConfirmation": "Twoja nazwa użytkownika, <%= username %>, została potwierdzona!", "usernameNotVerified": "Prosimy potwierdzić swoją nazwę użytkownika.", - "changeUsernameDisclaimer": "Wkrótce będziemy zmieniać nazwy logowania na unikalne, publiczne nazwy użytkowników. Nowe nazwy użytkowników będą używane do: zaproszeń, wywoływania innych osób na czacie poprzez @nazwę oraz w korespondencji." + "changeUsernameDisclaimer": "Wkrótce będziemy zmieniać nazwy logowania na unikalne, publiczne nazwy użytkowników. Nowe nazwy użytkowników będą używane do: zaproszeń, wywoływania innych osób na czacie poprzez @nazwę oraz w korespondencji.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/pl/subscriber.json b/website/common/locales/pl/subscriber.json index 1e83faf7bc..300d671a00 100644 --- a/website/common/locales/pl/subscriber.json +++ b/website/common/locales/pl/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Czy masz kod kuponu?", "subscriptionAlreadySubscribedLeadIn": "Dziękujemy za subskrybcję!", "subscriptionAlreadySubscribed1": "Żeby zobaczyć szczegóły Swojego abonamentu i anulować, odnowić albo zmienić Twój abonament, przejdź proszę do Symbol Użytkownika > Ustawienia > Subskrypcja.", - "purchaseAll": "Kup Wszystko", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Abonenci mogą kupować klejnoty za złoto w Targu! Dla łatwego dostępu możesz też przyczepić klejnot do Swoich Nagród.", "gemsRemaining": "Pozostałe Klejnoty", "notEnoughGemsToBuy": "Nie możesz kupić takiej ilości klejnotów" diff --git a/website/common/locales/pt/character.json b/website/common/locales/pt/character.json index b4d90abc24..d42cb44c40 100644 --- a/website/common/locales/pt/character.json +++ b/website/common/locales/pt/character.json @@ -7,7 +7,7 @@ "noPhoto": "Este Habiticano não adicionout uma foto.", "other": "Outros", "fullName": "Nome Completo", - "displayName": "Nome a Exibir", + "displayName": "Display name", "changeDisplayName": "Mudar Nome de Utilizador", "newDisplayName": "Novo Nome de Utilizador", "displayPhoto": "Foto", diff --git a/website/common/locales/pt/front.json b/website/common/locales/pt/front.json index 0dd3d01e15..4363325fbb 100644 --- a/website/common/locales/pt/front.json +++ b/website/common/locales/pt/front.json @@ -271,15 +271,9 @@ "emailTaken": "Endereço de email já está sendo usado em uma conta.", "newEmailRequired": "Novo endereço de e-mail em falta.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "A confirmação da palavra-passe não corresponde com a palavra-passe.", "invalidLoginCredentials": "Nome de utilizador e/ou e-mail e/ou palavra-passe incorretos.", "passwordResetPage": "Reinicializar Senha", @@ -334,7 +328,7 @@ "joinMany": "Junte-se aos mais de 2,000,000 de pessoas que se divertem a concretizar os seus objetivos!", "joinToday": "Junta-te ao Habitica Hoje", "signup": "Inscrever", - "getStarted": "Começar", + "getStarted": "Get Started!", "mobileApps": "Apps Móveis", "learnMore": "Saber Mais" } \ No newline at end of file diff --git a/website/common/locales/pt/generic.json b/website/common/locales/pt/generic.json index e1f797e908..1b4a5f2f1b 100644 --- a/website/common/locales/pt/generic.json +++ b/website/common/locales/pt/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Id. do Utilizador obrigatória", "resetFilters": "Limpar todos os filtros", "applyFilters": "Aplicar filtros", + "wantToWorkOn": "I want to work on:", "categories": "Categorias", "habiticaOfficial": "Habitical Oficial", "animals": "Animais", diff --git a/website/common/locales/pt/groups.json b/website/common/locales/pt/groups.json index b23bee101f..e332e6024c 100644 --- a/website/common/locales/pt/groups.json +++ b/website/common/locales/pt/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Convidar Usuários Existentes", "byColon": "Por:", "inviteNewUsers": "Convidar Novos Usuários", - "sendInvitations": "Enviar Convites", + "sendInvitations": "Send Invites", "invitationsSent": "Convites enviados!", "invitationSent": "Convite enviado!", "invitedFriend": "Convidou um Amigo", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Você não pode se remover!", "groupMemberNotFound": "Usuário não encontrado entre os membros do grupo", "mustBeGroupMember": "Deve ser membro do grupo.", - "canOnlyInviteEmailUuid": "Só pode convidar usando uuids ou emails.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Endereço de e-mail em falta no convite.", "inviteMissingUuid": "A id. do utilizador está em falta no convite", "inviteMustNotBeEmpty": "O convite não deve estar em branco.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "Id de Utilizador: <%= userId %>, Utilizador \"<%= username %>\" já tem um convite pendente.", "userAlreadyInAParty": "ID de Utilizador: <%= userId %>, Utilizador \"<%= username %>\" já pertence a uma equipa.", "userWithIDNotFound": "Usuário com id \"<%= userId %>\" não encontrado.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "O utilizador não tem um registo local (nome de utilizador, e-mail, palavra-passe).", "uuidsMustBeAnArray": "Convites de ID de Usuário devem ser um arranjo.", "emailsMustBeAnArray": "Convites de endereço de e-mail precisa ser um arranjo.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Você só pode convidar \"<%= maxInvites %>\" de cada vez", "partyExceedsMembersLimit": "O tamanho da equipa está limitado a <%= maxMembersParty %> membros", "onlyCreatorOrAdminCanDeleteChat": "Não autorizado a deletar essa mensagem!", @@ -361,6 +363,10 @@ "liked": "Gosto", "joinGuild": "Entra na Guilda", "inviteToGuild": "Convidar para a Guilda", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Enviar mensagem ao Lider da Guilda", "donateGems": "Doar Gemas", "updateGuild": "Atualizar Guilda", diff --git a/website/common/locales/pt/messages.json b/website/common/locales/pt/messages.json index 7d6a5df90e..2c86bc43e1 100644 --- a/website/common/locales/pt/messages.json +++ b/website/common/locales/pt/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "São necessárias as identificações de notificação.", "unallocatedStatsPoints": "Tens <%= points %> Ponto(s) de Atributo por alocar ", "beginningOfConversation": "Isto é o início da tua conversa com <%= userName %>. Lembra-te de ser gentil, respeitador, e de seguir as Directrizes da Comunidade.", - "messageDeletedUser": "Desculpa, este utilizador eliminou a sua conta." + "messageDeletedUser": "Desculpa, este utilizador eliminou a sua conta.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/pt/npc.json b/website/common/locales/pt/npc.json index a7fb6d460a..ca3f77c8d4 100644 --- a/website/common/locales/pt/npc.json +++ b/website/common/locales/pt/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Bem-vindo a", "welcomeBack": "Bem-vindo de volta!", "justin": "Justin", - "justinIntroMessage1": "Olá! Deve ser uma nova pessoa aqui. O meu nome é Justin, o seu guia de Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Para começar, precisa de criar um avatar.", "justinIntroMessage3": "Boa! Agora, em que é que está interessado em trabalhar nesta viagem?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Aqui estamos! Criei algumas Tarefas com base nos seus interesses para que possa iniciar o mais rápido possível. Carregue numa Tarefa para a editar ou adicione novas Tarefas para preencher a sua rotina!", "prev": "Anterior", "next": "Seguinte", diff --git a/website/common/locales/pt/settings.json b/website/common/locales/pt/settings.json index f91817b20e..54da8fa4a7 100644 --- a/website/common/locales/pt/settings.json +++ b/website/common/locales/pt/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/pt/subscriber.json b/website/common/locales/pt/subscriber.json index fc1e2b49ce..7d89e6a3e2 100644 --- a/website/common/locales/pt/subscriber.json +++ b/website/common/locales/pt/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "Obrigado pela subscrição!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Comprar Tudo", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "gemas restantes", "notEnoughGemsToBuy": "É incapaz de comprar essa quantidade de gemas" diff --git a/website/common/locales/pt_BR/character.json b/website/common/locales/pt_BR/character.json index 5b725d5507..631661ff2b 100644 --- a/website/common/locales/pt_BR/character.json +++ b/website/common/locales/pt_BR/character.json @@ -7,7 +7,7 @@ "noPhoto": "Este Habiticano ainda não adiciona uma foto.", "other": "Outros", "fullName": "Nome Completo", - "displayName": "Nome de Exibição", + "displayName": "Display name", "changeDisplayName": "Mudar o nome de exibição", "newDisplayName": "Novo nome de exibição", "displayPhoto": "Foto", diff --git a/website/common/locales/pt_BR/front.json b/website/common/locales/pt_BR/front.json index 3c8d3819ff..08e0108556 100644 --- a/website/common/locales/pt_BR/front.json +++ b/website/common/locales/pt_BR/front.json @@ -271,15 +271,9 @@ "emailTaken": "Endereço de e-mail já está sendo usado em uma conta.", "newEmailRequired": "Faltando novo endereço de e-mail.", "usernameTime": " É hora de definir seu nome de usuário!", - "usernameInfo": "Seu nome de exibição não foi mudado, mas o seu velho nome de usuário agora se tornará seu nome de usuário público. Este nome de usuário será usado para convites, @menções no bate-papo, e mensagens.

Se você quiser saber mais sobre essa mudança, visite a página Nomes de Jogadores, na wiki.", - "usernameTOSRequirements": "Os nomes de usuário devem estar de acordo com nossos Termos de Serviço e Diretrizes da Comunidade. Se você não definiu um Nome de Usuário anteriormente, seu nome de usuário foi gerado automaticamente.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Este nome de usuário já está sendo utilizado.", - "usernameWrongLength": "O nome de usuário deve conter entre 1 e 20 caracteres.", - "displayNameWrongLength": "Os nomes de exibição devem conter entre 1 e 30 caracteres.", - "usernameBadCharacters": "Nomes de usuários devem conter apenas letras de A a Z, números de 0 a 9, hífens ou underlines.", - "nameBadWords": " Nomes não podem incluir palavras inapropriadas.", - "confirmUsername": "Confirmar nome de usuário.", - "usernameConfirmed": " Nome de usuário confirmado!", "passwordConfirmationMatch": "A confirmação de senha não corresponde à senha.", "invalidLoginCredentials": "Nome de usuário e/ou e-mail e/ou senha incorretos.", "passwordResetPage": "Mudar a Senha", @@ -334,7 +328,7 @@ "joinMany": "Junte-se a mais de 2.000.000 de pessoas que se divertem enquanto cumprem seus objetivos!", "joinToday": "Entre para o Habitica hoje", "signup": "Registre-se", - "getStarted": "Comece Já", + "getStarted": "Get Started!", "mobileApps": "Aplicativos Móveis", "learnMore": "Aprenda Mais" } \ No newline at end of file diff --git a/website/common/locales/pt_BR/generic.json b/website/common/locales/pt_BR/generic.json index 542c08c7c0..f64fc089ce 100644 --- a/website/common/locales/pt_BR/generic.json +++ b/website/common/locales/pt_BR/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "ID de Usuário é necessária", "resetFilters": "Limpar filtros", "applyFilters": "Aplicar Filtros", + "wantToWorkOn": "I want to work on:", "categories": "Categorias", "habiticaOfficial": "Oficial do Habitica", "animals": "Animais", diff --git a/website/common/locales/pt_BR/groups.json b/website/common/locales/pt_BR/groups.json index 59624b39db..152d4981f7 100644 --- a/website/common/locales/pt_BR/groups.json +++ b/website/common/locales/pt_BR/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Convidar Usuários Existentes", "byColon": "Por:", "inviteNewUsers": "Convidar Novos Usuários", - "sendInvitations": "Enviar Convites", + "sendInvitations": "Send Invites", "invitationsSent": "Convites enviados!", "invitationSent": "Convite enviado!", "invitedFriend": "Convidou um Amigo(a)", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Você não pode se remover!", "groupMemberNotFound": "Usuário não encontrado entre os membros do grupo", "mustBeGroupMember": "Deve ser um membro do grupo.", - "canOnlyInviteEmailUuid": "Só pode convidar usando uuids ou e-mails.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Faltando o endereço de e-mail no convite.", "inviteMissingUuid": "Falta o ID do usuário no convite", "inviteMustNotBeEmpty": "O convite não pode estar vazio.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "ID de Usuário: <%= userId %>, Usuário \"<%= username %>\" está com convite pendente.", "userAlreadyInAParty": "ID de Usuário: <%= userId %>, Usuário \"<%= username %>\" já está no grupo.", "userWithIDNotFound": "Usuário com id \"<%= userId %>\" não encontrado.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Usuário não tem um registro local (usuário, e-mail, senha).", "uuidsMustBeAnArray": "Convites de ID de Usuário devem ser um array.", "emailsMustBeAnArray": "Convites de endereço de e-mail precisam ser um array.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Você só pode convidar \"<%= maxInvites %>\" de cada vez", "partyExceedsMembersLimit": "O grupo pode ter no máximo <%= maxMembersParty %> membros", "onlyCreatorOrAdminCanDeleteChat": "Não autorizado a deletar essa mensagem!", @@ -361,6 +363,10 @@ "liked": "Curtido", "joinGuild": "Entrar na Guilda", "inviteToGuild": "Convidar para Guilda", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Enviar Mensagem ao Líder", "donateGems": "Doar Gemas", "updateGuild": "Atualizar Guilda", diff --git a/website/common/locales/pt_BR/messages.json b/website/common/locales/pt_BR/messages.json index b9b3dd6e2a..32cf506204 100644 --- a/website/common/locales/pt_BR/messages.json +++ b/website/common/locales/pt_BR/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Os IDs de notificação são obrigatórios.", "unallocatedStatsPoints": "Você tem <%= points %> Pontos de Atributos não distribuidos", "beginningOfConversation": "Este é o começo de sua conversa com <%= userName %>. Lembre-se da gentileza, respeito e de seguir as Diretrizes da Comunidade.", - "messageDeletedUser": "Desculpe, esse usuário deletou sua conta." + "messageDeletedUser": "Desculpe, esse usuário deletou sua conta.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/pt_BR/npc.json b/website/common/locales/pt_BR/npc.json index 093df89900..1e2739cb68 100644 --- a/website/common/locales/pt_BR/npc.json +++ b/website/common/locales/pt_BR/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Boas Vindas a", "welcomeBack": "Bem Vindo(a) de volta! ", "justin": "Justin", - "justinIntroMessage1": "Olá! Primeira vez por aqui? Meu nome é Justin, seu guia do Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "De início, você precisará criar um avatar.", "justinIntroMessage3": "Ótimo! Agora, no que você tem interesse em trabalhar durante essa jornada?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Prontinho, aqui está! Eu te fiz algumas Tarefas baseado nos seus interesses de modo que você já possa começar. Clique numa Tarefa para editar ou adicione novas Tarefas pra completar sua rotina!", "prev": "Ant", "next": "Próximo", diff --git a/website/common/locales/pt_BR/settings.json b/website/common/locales/pt_BR/settings.json index 35abdb8f4e..97a9639253 100644 --- a/website/common/locales/pt_BR/settings.json +++ b/website/common/locales/pt_BR/settings.json @@ -125,7 +125,7 @@ "importantAnnouncements": "Lembretes de fazer check-in para completar tarefas e receber recompensas", "weeklyRecaps": "Resumos de atividades da sua conta na semana passada (Nota: Atualmente está desativado devido a problemas de desempenho, mas esperamos ter isto funcionando e enviando e-mails novamente em breve!)", "onboarding": "Orientações em como preparar sua conta no Habitica", - "majorUpdates": "Important announcements", + "majorUpdates": "Anúncios importantes", "questStarted": "Sua Missão começou", "invitedQuest": "Convidado para Missão", "kickedGroup": "Expulso do grupo", @@ -157,7 +157,7 @@ "generate": "Gerar", "getCodes": "Obter Códigos", "webhooks": "Webhooks", - "webhooksInfo": "Habitica provides webhooks so that when certain actions occur in your account, information can be sent to a script on another website. You can specify those scripts here. Be careful with this feature because specifying an incorrect URL can cause errors or slowness in Habitica. For more information, see the wiki's Webhooks page.", + "webhooksInfo": "O Habitica fornece webhooks para que, quando certas ações ocorrerem na sua conta, as informações possam ser enviadas para um script em outro site. Você pode especificar esses scripts aqui. Tenha cuidado com esse recurso, pois especificar um URL incorreto pode causar erros ou lentidão no Habitica. Para mais informações, veja Webhooks, na página da wiki.", "enabled": "Habilitado", "webhookURL": "URL do Webhook", "invalidUrl": "url inválida", @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Nomes de usuários devem conter apenas letras de A a Z, números de 0 a 9, hífens ou underlines.", "currentUsername": "Nome de usuário atual:", "displaynameIssueLength": "Os nomes de exibição devem conter entre 1 e 30 caracteres.", - "displaynameIssueSlur": "Os nomes de exibição não podem conter linguagem imprópria.", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Ir para Configurações", "usernameVerifiedConfirmation": "Seu nome de usuário, <%= username %>, foi confirmado!", "usernameNotVerified": "Por favor, confirme seu nome de usuário.", - "changeUsernameDisclaimer": "Faremos a transição dos nomes de login para nomes de usuários públicos exclusivos em breve. Este nome de usuário será usado para convites, @menções em bate-papo e mensagens." + "changeUsernameDisclaimer": "Faremos a transição dos nomes de login para nomes de usuários públicos exclusivos em breve. Este nome de usuário será usado para convites, @menções em bate-papo e mensagens.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/pt_BR/subscriber.json b/website/common/locales/pt_BR/subscriber.json index 0e978f42ba..93fa4bb972 100644 --- a/website/common/locales/pt_BR/subscriber.json +++ b/website/common/locales/pt_BR/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Você tem um código de cupom?", "subscriptionAlreadySubscribedLeadIn": "Obrigado por tornar-se um assinante!", "subscriptionAlreadySubscribed1": "Para ver os detalhes, cancelamento, renovação ou mudanças na sua assinatura, por favor vá para Usuário > Configurações > Assinatura.", - "purchaseAll": "Comprar Todos", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Assinantes podem comprar gemas com ouro no Mercado! Para fácil acesso, você pode marcar a gema na sua coluna de Recompensas.", "gemsRemaining": "gemas restantes", "notEnoughGemsToBuy": "Você não pode comprar essa quantidade de gemas." diff --git a/website/common/locales/ro/character.json b/website/common/locales/ro/character.json index d09fdc67b6..8e2c2fe780 100644 --- a/website/common/locales/ro/character.json +++ b/website/common/locales/ro/character.json @@ -7,7 +7,7 @@ "noPhoto": "Acest Habitican nu și-a adăugat o poză.", "other": "Altele", "fullName": "Numele complet", - "displayName": "Numele afișat", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Poză", diff --git a/website/common/locales/ro/front.json b/website/common/locales/ro/front.json index e675197b0d..151c4c5afb 100644 --- a/website/common/locales/ro/front.json +++ b/website/common/locales/ro/front.json @@ -271,15 +271,9 @@ "emailTaken": "Email address is already used in an account.", "newEmailRequired": "Missing new email address.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "Password confirmation doesn't match password.", "invalidLoginCredentials": "Incorrect username and/or email and/or password.", "passwordResetPage": "Reset Password", @@ -334,7 +328,7 @@ "joinMany": "Join over 2,000,000 people having fun while accomplishing their goals!", "joinToday": "Join Habitica Today", "signup": "Sign Up", - "getStarted": "Get Started", + "getStarted": "Get Started!", "mobileApps": "Mobile Apps", "learnMore": "Learn More" } \ No newline at end of file diff --git a/website/common/locales/ro/generic.json b/website/common/locales/ro/generic.json index 90e5f93269..addfc05803 100644 --- a/website/common/locales/ro/generic.json +++ b/website/common/locales/ro/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "User ID is required", "resetFilters": "Clear all filters", "applyFilters": "Apply Filters", + "wantToWorkOn": "I want to work on:", "categories": "Categorii", "habiticaOfficial": "Oficial Habitica", "animals": "Animale", diff --git a/website/common/locales/ro/groups.json b/website/common/locales/ro/groups.json index b69753a963..d9ce85df12 100644 --- a/website/common/locales/ro/groups.json +++ b/website/common/locales/ro/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Invite Existing Users", "byColon": "By:", "inviteNewUsers": "Invite New Users", - "sendInvitations": "Send Invitations", + "sendInvitations": "Send Invites", "invitationsSent": "Invitations sent!", "invitationSent": "Invitation sent!", "invitedFriend": "Invited a Friend", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "You cannot remove yourself!", "groupMemberNotFound": "User not found among group's members", "mustBeGroupMember": "Must be member of the group.", - "canOnlyInviteEmailUuid": "Can only invite using uuids or emails.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Missing email address in invite.", "inviteMissingUuid": "Missing user id in invite", "inviteMustNotBeEmpty": "Invite must not be empty.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", "userWithIDNotFound": "User with id \"<%= userId %>\" not found.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "User does not have a local registration (username, email, password).", "uuidsMustBeAnArray": "User ID invites must be an array.", "emailsMustBeAnArray": "Email address invites must be an array.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "You can only invite \"<%= maxInvites %>\" at a time", "partyExceedsMembersLimit": "Party size is limited to <%= maxMembersParty %> members", "onlyCreatorOrAdminCanDeleteChat": "Not authorized to delete this message!", @@ -361,6 +363,10 @@ "liked": "Liked", "joinGuild": "Join Guild", "inviteToGuild": "Invite to Guild", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Message Guild Leader", "donateGems": "Donate Gems", "updateGuild": "Update Guild", diff --git a/website/common/locales/ro/messages.json b/website/common/locales/ro/messages.json index aca9f8ebbc..e3cf81d3ed 100644 --- a/website/common/locales/ro/messages.json +++ b/website/common/locales/ro/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Notification ids are required.", "unallocatedStatsPoints": "You have <%= points %> unallocated Stat Points", "beginningOfConversation": "This is the beginning of your conversation with <%= userName %>. Remember to be kind, respectful, and follow the Community Guidelines!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/ro/npc.json b/website/common/locales/ro/npc.json index 80be0629a6..2d3db2636c 100644 --- a/website/common/locales/ro/npc.json +++ b/website/common/locales/ro/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Bine ai venit la", "welcomeBack": "Welcome back!", "justin": "Justin", - "justinIntroMessage1": "Salutare! Trebuie să fii nou pe aici. Numele meu este Justin, ghidul tău în Habitica. ", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Pentru a începe, trebuie să creezi un avatar. ", "justinIntroMessage3": "Grozav! Acum, ești interesat să lucrezi în continuare în timpul călătoriei?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Iată-ne! Am adăugat câte va Sarcini pentru tine, bazat pe interesele tale, astfel încât să poți începe imediat. Apasă pe o Sarcină pentru a edita, sau adaugă o nouă Sarcină care să se potrivească rutinii tale!", "prev": "Prev", "next": "Următorul", diff --git a/website/common/locales/ro/settings.json b/website/common/locales/ro/settings.json index 519445f7d5..3695139898 100644 --- a/website/common/locales/ro/settings.json +++ b/website/common/locales/ro/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/ro/subscriber.json b/website/common/locales/ro/subscriber.json index f332cceb5b..8a04d80f86 100644 --- a/website/common/locales/ro/subscriber.json +++ b/website/common/locales/ro/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "Thanks for subscribing!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Purchase All", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "gems remaining", "notEnoughGemsToBuy": "You are unable to buy that amount of gems" diff --git a/website/common/locales/ru/character.json b/website/common/locales/ru/character.json index b54fd202a8..6db0b6ae4b 100644 --- a/website/common/locales/ru/character.json +++ b/website/common/locales/ru/character.json @@ -7,7 +7,7 @@ "noPhoto": "Этот житель страны Habitica не добавил фотографию.", "other": "Прочее", "fullName": "Полное имя", - "displayName": "Отображаемое имя", + "displayName": "Display name", "changeDisplayName": "Изменить отображаемое имя", "newDisplayName": "Новое отображаемое имя", "displayPhoto": "Фото", diff --git a/website/common/locales/ru/content.json b/website/common/locales/ru/content.json index b9a9d1e18b..82eb23ff86 100644 --- a/website/common/locales/ru/content.json +++ b/website/common/locales/ru/content.json @@ -163,13 +163,13 @@ "questEggYarnAdjective": "шерстяной", "questEggPterodactylText": "Птеродактиль", "questEggPterodactylMountText": "Птеродактиль", - "questEggPterodactylAdjective": "доверие", + "questEggPterodactylAdjective": "доверчивый", "questEggBadgerText": "Барсук", "questEggBadgerMountText": "Барсук", "questEggBadgerAdjective": "суетливый", "questEggSquirrelText": "Белка", "questEggSquirrelMountText": "Белка", - "questEggSquirrelAdjective": "пышный хвост", + "questEggSquirrelAdjective": "пышно-хвостая", "questEggSeaSerpentText": "Морской змей", "questEggSeaSerpentMountText": "Морской змей", "questEggSeaSerpentAdjective": "мерцающий", @@ -178,7 +178,7 @@ "questEggKangarooAdjective": "острый", "questEggAlligatorText": "Аллигатор", "questEggAlligatorMountText": "Аллигатор", - "questEggAlligatorAdjective": "хитрость", + "questEggAlligatorAdjective": "хитрый", "eggNotes": "Найдите инкубационный эликсир, чтобы полить им это яйцо, и из него вылупится <%= eggAdjective(locale) %> <%= eggText(locale) %>.", "hatchingPotionBase": "Обыкновенный", "hatchingPotionWhite": "Белый", diff --git a/website/common/locales/ru/front.json b/website/common/locales/ru/front.json index 599b0be605..7a2bc13f9e 100644 --- a/website/common/locales/ru/front.json +++ b/website/common/locales/ru/front.json @@ -271,15 +271,9 @@ "emailTaken": "Адрес электронной почты уже используется.", "newEmailRequired": "Отсутствует новый адрес электронной почты.", "usernameTime": "Время выбрать свое имя пользователя!", - "usernameInfo": "Ваше отображаемое имя не изменилось, но ваше прежнее имя для логина пользователя станет общедоступным именем пользователя. Имя пользователя будет использоваться для приглашений, @упоминаний в чате и сообщений.

Если вы хотите узнать более подробно об изменениях, посетите википедию Имена игроков.", - "usernameTOSRequirements": "Имя пользователя должно соответствовать нашим Условиям обслуживания и Принципам сообщества. Если вы ранее не выбирали имя для логина, то ваше имя пользователя было автоматически сгенерировано.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Имя пользователя уже занято.", - "usernameWrongLength": "Имя пользователя должно быть от 1 до 20 символов.", - "displayNameWrongLength": "Отображаемое имя должно быть от 1 до 30 символов.", - "usernameBadCharacters": "Имя пользователя должно содержать только буквы от a-z, цифры 0-9 и дефисы или подчеркивания.", - "nameBadWords": "Имя не может содержать не разрешенные слова.", - "confirmUsername": "Подтвердите свое имя пользователя", - "usernameConfirmed": "Имя пользователя принято", "passwordConfirmationMatch": "Подтверждение пароля не совпадает с паролем.", "invalidLoginCredentials": "Неправильное имя пользователя и/или адрес электронной почты и/или пароль.", "passwordResetPage": "Сбросить пароль", @@ -334,7 +328,7 @@ "joinMany": "Присоединяйтесь к более чем 2,000,000 людей, весело проводящих время при достижении своих целей!", "joinToday": "Присоединяйтесь к стране Habitica", "signup": "Регистрация", - "getStarted": "Начать", + "getStarted": "Get Started!", "mobileApps": "Мобильные приложения", "learnMore": "Подробнее" } \ No newline at end of file diff --git a/website/common/locales/ru/gear.json b/website/common/locales/ru/gear.json index 872a523eb3..97af067020 100644 --- a/website/common/locales/ru/gear.json +++ b/website/common/locales/ru/gear.json @@ -1104,7 +1104,7 @@ "headMystery201802Notes": "Антенны на этом шлеме действуют как волшебная лоза, улавливая рядом чувства любви и поддержки. Бонусов не даёт. Подарок подписчикам февраля 2018.", "headMystery201803Text": "Венец отважной Стрекозы", "headMystery201803Notes": "Хотя его внешний вид довольно декоративен, вы можете задействовать крылья на этом ободке для дополнительного подъема! Не даёт преимуществ. Подарок подписчикам марта 2018.", - "headMystery201805Text": "Восхитительный Шлем Павлина", + "headMystery201805Text": "Восхитительный шлем павлина", "headMystery201805Notes": "Этот шлем сделает вас самой гордой и симпатичной (и, возможно, самой громкой) птицей в городе. Бонусов не даёт. Подарок подписчикам мая 2018.", "headMystery201806Text": "Голова притягательного удильщика", "headMystery201806Notes": "Гипнотизирующий свет, исходящий из верхушки этого шлема переведёт всех обитателей моря на вашу сторону. Мы призываем вас использовать ваши привлекающие световые силы для хороших целей! Бонусов не даёт. Подарок подписчикам июня 2018.", diff --git a/website/common/locales/ru/generic.json b/website/common/locales/ru/generic.json index 9b076e85ac..54151c7e3f 100644 --- a/website/common/locales/ru/generic.json +++ b/website/common/locales/ru/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Tребуется ID пользователя", "resetFilters": "Очистить все фильтры", "applyFilters": "Применить фильтры", + "wantToWorkOn": "I want to work on:", "categories": "Категории", "habiticaOfficial": "Официальный сайт Habitica", "animals": "Животные", diff --git a/website/common/locales/ru/groups.json b/website/common/locales/ru/groups.json index 48226c62ec..8c6963c784 100644 --- a/website/common/locales/ru/groups.json +++ b/website/common/locales/ru/groups.json @@ -116,7 +116,7 @@ "sortTier": "Сортировать по рангу", "ascendingAbbrev": "По возрастанию", "descendingAbbrev": "По убыванию", - "applySortToHeader": "Применить сортировку к верхней Строке с Командой героев", + "applySortToHeader": "Применить сортировку к области команды", "confirmGuild": "Создать гильдию за 4 самоцвета?", "leaveGroupCha": "Покинуть испытания Гильдии и...", "confirm": "Подтвердить", @@ -183,7 +183,7 @@ "inviteExistUser": "Пригласить существующих пользователей", "byColon": "От:", "inviteNewUsers": "Пригласить новых пользователей", - "sendInvitations": "Пригласить", + "sendInvitations": "Send Invites", "invitationsSent": "Приглашения отправлены!", "invitationSent": "Приглашение отправлено!", "invitedFriend": "Приглашен друг", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Вы не можете удалить себя!", "groupMemberNotFound": "Пользователь не найден среди членов группы.", "mustBeGroupMember": "Должен быть членом группы.", - "canOnlyInviteEmailUuid": "Можно приглашать только с помощью UUID или адреса электронной почты.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "В приглашении отсутствует адрес электронной почты.", "inviteMissingUuid": "В приглашении отсутствует ID пользователя", "inviteMustNotBeEmpty": "В приглашении нет текста", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "ID: <%= userId %>, пользователь \"<%= username %>\" уже получил приглашение.", "userAlreadyInAParty": "ID: <%= userId %>, пользователь \"<%= username %>\" уже в команде. ", "userWithIDNotFound": "Пользователь с ID \"<%= userId %>\" не найден.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Пользователь не имеет местной регистрации (имя пользователя, электронная почта, пароль)", "uuidsMustBeAnArray": "Приглашения User ID должны быть массивом.", "emailsMustBeAnArray": "Приглашения по электронной почте должны быть массивом.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Вы можете приглашать только \"<%= maxInvites %>\" единовременно", "partyExceedsMembersLimit": "Размер команды ограничен <%= maxMembersParty %> участниками", "onlyCreatorOrAdminCanDeleteChat": "Вы не авторизованы чтобы удаить это сообщение!", @@ -361,6 +363,10 @@ "liked": "Понравилось", "joinGuild": "Присоединиться к гильдии", "inviteToGuild": "Пригласить в гильдию", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Написать главе гильдии", "donateGems": "Пожертвовать самоцветы", "updateGuild": "Обновить гильдию", diff --git a/website/common/locales/ru/messages.json b/website/common/locales/ru/messages.json index 7e6a6a251c..b453a57a06 100644 --- a/website/common/locales/ru/messages.json +++ b/website/common/locales/ru/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Необходим идентификатор оповещений.", "unallocatedStatsPoints": "Вы не распределили <%= points %> очков", "beginningOfConversation": "Это начало вашего разговора с <%= userName %>. Не забывайте, что общепринятые правила сообщества предписавыют быть добрыми, уважительными!", - "messageDeletedUser": "Приносим свои извинения, этот пользователь удалил свой аккаунт." + "messageDeletedUser": "Приносим свои извинения, этот пользователь удалил свой аккаунт.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/ru/npc.json b/website/common/locales/ru/npc.json index 21043d9036..b4c6344295 100644 --- a/website/common/locales/ru/npc.json +++ b/website/common/locales/ru/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Добро пожаловать в", "welcomeBack": "С возвращением!", "justin": "Джастин", - "justinIntroMessage1": "Привет! Похоже, что ты тут новенький. Моё имя Justin, твой гид по стране Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Чтобы начать, вам понадобится создать аватар.", "justinIntroMessage3": "Отлично! Теперь, над чем вы бы хотели работать во время этого путешествия?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Мы закончили! Я заполнил несколько заданий для вас, основываясь на ваших интересах, чтобы вы могли начать уже сейчас. Кликните по заданию, чтобы изменить его или добавить новые задания, которые будут соответствовать вашей рутине!", "prev": "Пред", "next": "След", diff --git a/website/common/locales/ru/questscontent.json b/website/common/locales/ru/questscontent.json index 810b530482..e046dcee47 100644 --- a/website/common/locales/ru/questscontent.json +++ b/website/common/locales/ru/questscontent.json @@ -600,7 +600,7 @@ "questSquirrelCompletion": "С деликатным подходом, уговаривая на сделку и несколькими успокаивающими заклинаниями вы уговариваете белку отказаться от своего клада и вернуться в свой домик, который @Shtut только что доделал. Они оставили несколько желудей на верстаке. «Это яйца с белками! Может быть, вы сможете вырастить их и научить хорошим манерам без игры с едой».", "questSquirrelBoss": "Подлая Белка", "questSquirrelDropSquirrelEgg": "Белка (Яйцо)", - "questSquirrelUnlockText": "Позволяет покупать на рынке Белку в яйце.", + "questSquirrelUnlockText": "Позволяет покупать на рынке белку в яйце.", "cuddleBuddiesText": "Набор квестов «Плюшевая Команда»", "cuddleBuddiesNotes": "Содержит квесты «Убийца кролик!», «Хорек-плохиш» и «Братство свинок из Гвинеи». Доступен до 31 мая.", "aquaticAmigosText": "Набор квестов «Водные амигос»", diff --git a/website/common/locales/ru/settings.json b/website/common/locales/ru/settings.json index fb4d39ff42..1cd2806f0a 100644 --- a/website/common/locales/ru/settings.json +++ b/website/common/locales/ru/settings.json @@ -125,7 +125,7 @@ "importantAnnouncements": "Напоминания о ежедневном входе для выполнения заданий и получения призов", "weeklyRecaps": "Обзоры действий с вашего аккаунта за последние недели (Замечание: временно недоступно из-за проблем с производительностью, но мы надеемся, что скоро сможем вернуть все назад и отправлять письма снова!)", "onboarding": "Руководство о создании вашего аккаунта в Habitica", - "majorUpdates": "Important announcements", + "majorUpdates": "Важные объявления", "questStarted": "Ваш Квест начался", "invitedQuest": "Приглашен в квест", "kickedGroup": "Исключен из группы", @@ -157,7 +157,7 @@ "generate": "Сгенерировать", "getCodes": "Получить коды", "webhooks": "Веб-хуки", - "webhooksInfo": "Habitica provides webhooks so that when certain actions occur in your account, information can be sent to a script on another website. You can specify those scripts here. Be careful with this feature because specifying an incorrect URL can cause errors or slowness in Habitica. For more information, see the wiki's Webhooks page.", + "webhooksInfo": "Habitica предоставляет веб-хуки, так что когда в вашем аккаунте возникают определенные действия, информация о них может быть отправлена скрипту на другой сайт. Вы может определить эти скрипты здесь. Но будьте осторожны с этой функцией: неправильный URL может привести к ошибкам или к замедлению работы Habitica. Для дополнительной информации см. страницу Веб-хуки на вики.", "enabled": "Включено", "webhookURL": "Ссылка на веб-хук", "invalidUrl": "неверный url", @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Имя пользователя может содержать только буквы от a-z, цифры 0-9, дефисы или подчеркивания.", "currentUsername": "Используемое Имя пользователя:", "displaynameIssueLength": "Отображаемое имя должно быть от 1 до 30 символов.", - "displaynameIssueSlur": "Отображаемое имя не должно содержать ненормативной лексики", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Перейти в Настройки", "usernameVerifiedConfirmation": "Ваше Имя пользователя, <%= username %>, подтверждено!", "usernameNotVerified": "Подтвердите свое имя пользователя.", - "changeUsernameDisclaimer": "В ближайшее время мы начнем использовать имена, которые будут уникальные, общедоступные. Имя пользователя будет использоваться для приглашений, @упоминаний в чате и для обмена сообщениями." + "changeUsernameDisclaimer": "В ближайшее время мы начнем использовать имена, которые будут уникальные, общедоступные. Имя пользователя будет использоваться для приглашений, @упоминаний в чате и для обмена сообщениями.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/ru/subscriber.json b/website/common/locales/ru/subscriber.json index e25d382e11..d4bbd2bae3 100644 --- a/website/common/locales/ru/subscriber.json +++ b/website/common/locales/ru/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "У вас есть код купона?", "subscriptionAlreadySubscribedLeadIn": "Спасибо за подписку!", "subscriptionAlreadySubscribed1": "Чтобы просмотреть свои данные о подписке и отменить, продлить или изменить её, пожалуйста перейдите по Иконке профилья > Настройки > Подписка.", - "purchaseAll": "Приобрести всё", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Подписчики могут купить кристаллы за золото! Чтобы было проще, вы можете просто добавить кристалл в колонку наград.", "gemsRemaining": "самоцветов осталось", "notEnoughGemsToBuy": "Вы не можете купить это количество" diff --git a/website/common/locales/sk/character.json b/website/common/locales/sk/character.json index 06cd9f86a8..f24f6e19ed 100644 --- a/website/common/locales/sk/character.json +++ b/website/common/locales/sk/character.json @@ -7,7 +7,7 @@ "noPhoto": "Tento Habitican nepridal fotku.", "other": "Ostatné", "fullName": "Celé meno", - "displayName": "Zobrazené meno", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Fotka", diff --git a/website/common/locales/sk/front.json b/website/common/locales/sk/front.json index 7b6a97a3f1..cd924a24b4 100644 --- a/website/common/locales/sk/front.json +++ b/website/common/locales/sk/front.json @@ -271,15 +271,9 @@ "emailTaken": "E-mailová adresa je už použitá k účtu.", "newEmailRequired": "Chýba nová e-mailová adresa.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "Potvrdenie hesla sa nezhoduje s heslom.", "invalidLoginCredentials": "Nesprávne používateľské meno a/alebo e-mail a/alebo heslo.", "passwordResetPage": "Reset Password", @@ -334,7 +328,7 @@ "joinMany": "Join over 2,000,000 people having fun while accomplishing their goals!", "joinToday": "Join Habitica Today", "signup": "Sign Up", - "getStarted": "Get Started", + "getStarted": "Get Started!", "mobileApps": "Mobile Apps", "learnMore": "Learn More" } \ No newline at end of file diff --git a/website/common/locales/sk/generic.json b/website/common/locales/sk/generic.json index eb4088e9d3..0494fdb600 100644 --- a/website/common/locales/sk/generic.json +++ b/website/common/locales/sk/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "User ID is required", "resetFilters": "Clear all filters", "applyFilters": "Apply Filters", + "wantToWorkOn": "I want to work on:", "categories": "Categories", "habiticaOfficial": "Habitica Official", "animals": "Animals", diff --git a/website/common/locales/sk/groups.json b/website/common/locales/sk/groups.json index f28a4ac533..fb715f5729 100644 --- a/website/common/locales/sk/groups.json +++ b/website/common/locales/sk/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Pozvi existujúcich užívateľov", "byColon": "Od:", "inviteNewUsers": "Pozvi nových užívateľov", - "sendInvitations": "Pošli pozvánky", + "sendInvitations": "Send Invites", "invitationsSent": "Pozvánky odoslané!", "invitationSent": "Pozvánka odoslaná!", "invitedFriend": "Pozval priateľa", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Nemôžeš vyhodiť sám seba!", "groupMemberNotFound": "Používateľ nebol nájdený medzi členmi skupiny", "mustBeGroupMember": "Musíš byť člen skupiny.", - "canOnlyInviteEmailUuid": "Can only invite using uuids or emails.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Chýba e-mailová adresa v pozvánke.", "inviteMissingUuid": "Chýbajúce id užívateľa v pozvánke", "inviteMustNotBeEmpty": "Pozvánka nesmie byť prázdna.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", "userWithIDNotFound": "Používateľ s ID \"<%= userId %>\" sa nenašiel.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Používateľ tu nie je registrovaný (meno, e-mail, heslo).", "uuidsMustBeAnArray": "User ID invites must be an array.", "emailsMustBeAnArray": "Email address invites must be an array.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "You can only invite \"<%= maxInvites %>\" at a time", "partyExceedsMembersLimit": "Party size is limited to <%= maxMembersParty %> members", "onlyCreatorOrAdminCanDeleteChat": "Nemáš povolenie zmazať túto správu!", @@ -361,6 +363,10 @@ "liked": "Liked", "joinGuild": "Join Guild", "inviteToGuild": "Invite to Guild", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Message Guild Leader", "donateGems": "Donate Gems", "updateGuild": "Update Guild", diff --git a/website/common/locales/sk/limited.json b/website/common/locales/sk/limited.json index de1f2f4f86..f35d1c89e7 100644 --- a/website/common/locales/sk/limited.json +++ b/website/common/locales/sk/limited.json @@ -5,11 +5,11 @@ "annoyingFriends": "Otravní kamaráti", "annoyingFriendsText": "Got snowballed <%= count %> times by party members.", "alarmingFriends": "Znepokojujúci priatelia", - "alarmingFriendsText": "Got spooked <%= count %> times by party members.", + "alarmingFriendsText": "Členovia družiny ťa vystrašili <%= count %> krát.", "agriculturalFriends": "Poľnohospodárski priatelia", - "agriculturalFriendsText": "Got transformed into a flower <%= count %> times by party members.", + "agriculturalFriendsText": "Členovia družiny ťa premenili na kvetinu <%= count %> krát.", "aquaticFriends": "Vodní priatelia", - "aquaticFriendsText": "Got splashed <%= count %> times by party members.", + "aquaticFriendsText": "Členovia družiny ťa ošpliechali <%= count %> krát.", "valentineCard": "Valentínka", "valentineCardExplanation": "For enduring such a saccharine poem, you both receive the \"Adoring Friends\" badge!", "valentineCardNotes": "Pošli Valentínku členovi tvojej družiny.", @@ -23,9 +23,9 @@ "turkey": "Moriak", "gildedTurkey": "Pozlátený moriak", "polarBearPup": "Polárne medvieďa", - "jackolantern": "Jack-O-Lantern", - "ghostJackolantern": "Ghost Jack-O-Lantern", - "glowJackolantern": "Glow-in-the-Dark Jack-O-Lantern", + "jackolantern": "Jack-o'-lantern", + "ghostJackolantern": "Prízračný jack-o'-lantern ", + "glowJackolantern": "Žiarivý jack-o'-lantern", "seasonalShop": "Sezónny obchod", "seasonalShopClosedTitle": "<%= linkStart %>Leslie<%= linkEnd %>", "seasonalShopTitle": "<%= linkStart %>Sezónna kúzelníčka<%= linkEnd %>", @@ -38,8 +38,8 @@ "seasonalShopBrokenText": "My pavilion!!!!!!! My decorations!!!! Oh, the Dysheartener's destroyed everything :( Please help defeat it in the Tavern so I can rebuild!", "seasonalShopRebirth": "If you bought any of this equipment in the past but don't currently own it, you can repurchase it in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.", "candycaneSet": "Candy Cane (Mage)", - "skiSet": "Ski-sassin (Rogue)", - "snowflakeSet": "Snowflake (Healer)", + "skiSet": "Lyžossassin (Zlodej)", + "snowflakeSet": "Snehová vločka (Liečiteľ)", "yetiSet": "Yeti Tamer (Warrior)", "northMageSet": "Mage of the North (Mage)", "icicleDrakeSet": "Icicle Drake (Rogue)", @@ -131,17 +131,17 @@ "fall2018CarnivorousPlantSet": "Carnivorous Plant (Healer)", "fall2018AlterEgoSet": "Alter Ego (Rogue)", "eventAvailability": "Available for purchase until <%= date(locale) %>.", - "dateEndMarch": "April 30", - "dateEndApril": "April 19", - "dateEndMay": "May 31", - "dateEndJune": "June 14", - "dateEndJuly": "July 31", - "dateEndAugust": "August 31", - "dateEndSeptember": "September 21", - "dateEndOctober": "October 31", - "dateEndNovember": "November 30", - "dateEndJanuary": "January 31", - "dateEndFebruary": "February 28", + "dateEndMarch": "30. apríl", + "dateEndApril": "19. apríl", + "dateEndMay": "31. máj", + "dateEndJune": "14. jún", + "dateEndJuly": "31. júl", + "dateEndAugust": "31. august", + "dateEndSeptember": "21. september", + "dateEndOctober": "31. október", + "dateEndNovember": "30. november", + "dateEndJanuary": "31. január", + "dateEndFebruary": "28. február", "winterPromoGiftHeader": "GIFT A SUBSCRIPTION AND GET ONE FREE!", "winterPromoGiftDetails1": "Until January 12th only, when you gift somebody a subscription, you get the same subscription for yourself for free!", "winterPromoGiftDetails2": "Please note that if you or your gift recipient already have a recurring subscription, the gifted subscription will only start after that subscription is cancelled or has expired. Thanks so much for your support! <3", diff --git a/website/common/locales/sk/messages.json b/website/common/locales/sk/messages.json index 1dc12dfa2e..363f39598b 100644 --- a/website/common/locales/sk/messages.json +++ b/website/common/locales/sk/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Notification ids are required.", "unallocatedStatsPoints": "You have <%= points %> unallocated Stat Points", "beginningOfConversation": "This is the beginning of your conversation with <%= userName %>. Remember to be kind, respectful, and follow the Community Guidelines!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/sk/npc.json b/website/common/locales/sk/npc.json index 01c5b83de7..33af6972b9 100644 --- a/website/common/locales/sk/npc.json +++ b/website/common/locales/sk/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Vitaj v", "welcomeBack": "Vitaj späť!", "justin": "Justin", - "justinIntroMessage1": "Ahoj! Ty tu musíš byť nový. Moje meno je Justin, tvoj sprievodca Habitikou.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Aby si začal, potrebuješ si vytvoriť avatara.", "justinIntroMessage3": "Skvelé! Teraz mi povedz, na čom by si chcel pracovať počas tejto cesty?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Tu to máme! Vyplnil som pre teba nejaké Úlohy založené na tvojich záujmoch, takže môžeš hneď začať. Klikni na Úlohu, aby si ju upravil alebo pridaj novú Úlohu, ktorá sa bude hodiť k tvojmu režimu!", "prev": "Prev", "next": "Next", diff --git a/website/common/locales/sk/settings.json b/website/common/locales/sk/settings.json index 893346ad93..c4c1884913 100644 --- a/website/common/locales/sk/settings.json +++ b/website/common/locales/sk/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/sk/subscriber.json b/website/common/locales/sk/subscriber.json index 2fa6ffb1dd..8e339991a1 100644 --- a/website/common/locales/sk/subscriber.json +++ b/website/common/locales/sk/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "Thanks for subscribing!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Purchase All", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "gems remaining", "notEnoughGemsToBuy": "You are unable to buy that amount of gems" diff --git a/website/common/locales/sr/character.json b/website/common/locales/sr/character.json index f92a707a4c..84e08ec43c 100644 --- a/website/common/locales/sr/character.json +++ b/website/common/locales/sr/character.json @@ -7,7 +7,7 @@ "noPhoto": "This Habitican hasn't added a photo.", "other": "Ostalo", "fullName": "Ime i prezime", - "displayName": "Pseudonim", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Fotografija", diff --git a/website/common/locales/sr/front.json b/website/common/locales/sr/front.json index c128497b6b..e26f504129 100644 --- a/website/common/locales/sr/front.json +++ b/website/common/locales/sr/front.json @@ -271,15 +271,9 @@ "emailTaken": "Email address is already used in an account.", "newEmailRequired": "Missing new email address.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "Password confirmation doesn't match password.", "invalidLoginCredentials": "Incorrect username and/or email and/or password.", "passwordResetPage": "Reset Password", @@ -334,7 +328,7 @@ "joinMany": "Join over 2,000,000 people having fun while accomplishing their goals!", "joinToday": "Join Habitica Today", "signup": "Sign Up", - "getStarted": "Get Started", + "getStarted": "Get Started!", "mobileApps": "Mobile Apps", "learnMore": "Learn More" } \ No newline at end of file diff --git a/website/common/locales/sr/generic.json b/website/common/locales/sr/generic.json index 5faa78677e..11bfb6c6a2 100644 --- a/website/common/locales/sr/generic.json +++ b/website/common/locales/sr/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "User ID is required", "resetFilters": "Clear all filters", "applyFilters": "Apply Filters", + "wantToWorkOn": "I want to work on:", "categories": "Categories", "habiticaOfficial": "Habitica Official", "animals": "Animals", diff --git a/website/common/locales/sr/groups.json b/website/common/locales/sr/groups.json index f30a6a6b25..438c11a017 100644 --- a/website/common/locales/sr/groups.json +++ b/website/common/locales/sr/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Invite Existing Users", "byColon": "Od:", "inviteNewUsers": "Invite New Users", - "sendInvitations": "Send Invitations", + "sendInvitations": "Send Invites", "invitationsSent": "Invitations sent!", "invitationSent": "Invitation sent!", "invitedFriend": "Invited a Friend", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "You cannot remove yourself!", "groupMemberNotFound": "User not found among group's members", "mustBeGroupMember": "Must be member of the group.", - "canOnlyInviteEmailUuid": "Can only invite using uuids or emails.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Missing email address in invite.", "inviteMissingUuid": "Missing user id in invite", "inviteMustNotBeEmpty": "Invite must not be empty.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", "userWithIDNotFound": "User with id \"<%= userId %>\" not found.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "User does not have a local registration (username, email, password).", "uuidsMustBeAnArray": "User ID invites must be an array.", "emailsMustBeAnArray": "Email address invites must be an array.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "You can only invite \"<%= maxInvites %>\" at a time", "partyExceedsMembersLimit": "Party size is limited to <%= maxMembersParty %> members", "onlyCreatorOrAdminCanDeleteChat": "Not authorized to delete this message!", @@ -361,6 +363,10 @@ "liked": "Liked", "joinGuild": "Join Guild", "inviteToGuild": "Invite to Guild", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Message Guild Leader", "donateGems": "Donate Gems", "updateGuild": "Update Guild", diff --git a/website/common/locales/sr/messages.json b/website/common/locales/sr/messages.json index 9eefa7246b..c8ca7dff76 100644 --- a/website/common/locales/sr/messages.json +++ b/website/common/locales/sr/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Notification ids are required.", "unallocatedStatsPoints": "You have <%= points %> unallocated Stat Points", "beginningOfConversation": "This is the beginning of your conversation with <%= userName %>. Remember to be kind, respectful, and follow the Community Guidelines!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/sr/npc.json b/website/common/locales/sr/npc.json index fbdd617d6f..854d5540ba 100644 --- a/website/common/locales/sr/npc.json +++ b/website/common/locales/sr/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Welcome to", "welcomeBack": "Welcome back!", "justin": "Džastin", - "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, your guide to Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "To start, you'll need to create an avatar.", "justinIntroMessage3": "Great! Now, what are you interested in working on throughout this journey?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Here we are! I've filled out some Tasks for you based on your interests, so you can get started right away. Click a Task to edit or add new Tasks to fit your routine!", "prev": "Prev", "next": "Next", diff --git a/website/common/locales/sr/settings.json b/website/common/locales/sr/settings.json index 317cecd09b..302119076e 100644 --- a/website/common/locales/sr/settings.json +++ b/website/common/locales/sr/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/sr/subscriber.json b/website/common/locales/sr/subscriber.json index 95715c7b01..b0b5775860 100644 --- a/website/common/locales/sr/subscriber.json +++ b/website/common/locales/sr/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "Thanks for subscribing!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Purchase All", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "gems remaining", "notEnoughGemsToBuy": "You are unable to buy that amount of gems" diff --git a/website/common/locales/sv/character.json b/website/common/locales/sv/character.json index fd5cb367d4..036c9d13a9 100644 --- a/website/common/locales/sv/character.json +++ b/website/common/locales/sv/character.json @@ -7,7 +7,7 @@ "noPhoto": "Denna Habitican har inte lagt till ett foto.", "other": "Annat", "fullName": "Fullständigt namn", - "displayName": "Användarnamn", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Foto", diff --git a/website/common/locales/sv/front.json b/website/common/locales/sv/front.json index bfb3a7df37..f6c19d05d2 100644 --- a/website/common/locales/sv/front.json +++ b/website/common/locales/sv/front.json @@ -271,15 +271,9 @@ "emailTaken": "E-postadressen används redan av ett annat konto.", "newEmailRequired": "Saknar ny E-postadress.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "Lösenordsbekräftning matchar inte lösenord.", "invalidLoginCredentials": "Fel användarnamn och/eller email och/eller lösenord.", "passwordResetPage": "Återställ Lösenord", @@ -334,7 +328,7 @@ "joinMany": "Anslut dig till mer än 2,000,000 människor som har roligt medans de utför sina mål!", "joinToday": "Gå med i Habitica idag", "signup": "Bli Medlem", - "getStarted": "Kom Igång", + "getStarted": "Get Started!", "mobileApps": "Mobil Appar", "learnMore": "Lär Dig Mer" } \ No newline at end of file diff --git a/website/common/locales/sv/generic.json b/website/common/locales/sv/generic.json index 0918311f6e..031d38d5e5 100644 --- a/website/common/locales/sv/generic.json +++ b/website/common/locales/sv/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "Användar-ID är nödvändigt", "resetFilters": "Rensa alla filter", "applyFilters": "Lägg till filter", + "wantToWorkOn": "I want to work on:", "categories": "Kategorier", "habiticaOfficial": "Habitica Officiell", "animals": "Djur", diff --git a/website/common/locales/sv/groups.json b/website/common/locales/sv/groups.json index d34bb6f771..abde557cb8 100644 --- a/website/common/locales/sv/groups.json +++ b/website/common/locales/sv/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Bjud in existerande användare", "byColon": "Av:", "inviteNewUsers": "Bjud in nya användare", - "sendInvitations": "Skicka inbjudningar", + "sendInvitations": "Send Invites", "invitationsSent": "Inbjudningarna skickades!", "invitationSent": "Inbjudan skickad!", "invitedFriend": "Bjöd in en Vän", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Du kan inte ta bort dig själv!", "groupMemberNotFound": "Användaren hittades inte bland gruppens medlemmar", "mustBeGroupMember": "Måste vara medlem i gruppen.", - "canOnlyInviteEmailUuid": "Kan bara bjuda in genom att använda UUID eller E-mail.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Email adress för inbjudan saknas.", "inviteMissingUuid": "Saknar användar id i inbjudan", "inviteMustNotBeEmpty": "Inbjudan kan inte vara tom.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "AnvändarID: <%= userId %> , Användare \"<%= username %>\" har redan en avvaktande inbjudan.", "userAlreadyInAParty": "AnvändarID: <%= userId %>, Användare \"<%= username %>\" är redan medlem i ett sällskap.", "userWithIDNotFound": "Användaren med id \"<%= userId %>\" hittades inte.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Användaren är inte lokalt registrerad (användarnamn, e-post, lösenord).", "uuidsMustBeAnArray": "Användar-ID inbjudningar måste vara i ordning.", "emailsMustBeAnArray": "Email address invites must be an array.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Du kan bara bjuda in \"<%= maxInvites %>\" åt gången", "partyExceedsMembersLimit": "Sällskapsstorleken är begränsad till <%= maxMembersParty %> medlemmar", "onlyCreatorOrAdminCanDeleteChat": "Inte auktoriserad för att radera detta meddelande!", @@ -361,6 +363,10 @@ "liked": "Gillad", "joinGuild": "Gå med i Gille", "inviteToGuild": "Bjud in till Gille", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Skicka meddelande till Gille-ledaren", "donateGems": "Donera Juveler", "updateGuild": "Uppdatera Gille", diff --git a/website/common/locales/sv/messages.json b/website/common/locales/sv/messages.json index 944e1e947e..fbb4f0d543 100644 --- a/website/common/locales/sv/messages.json +++ b/website/common/locales/sv/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Notifikations-id krävs.", "unallocatedStatsPoints": "Du har <%= points %> outdelat Egenskapspoäng", "beginningOfConversation": "Detta är början av din konversation med <%= userName %>. Kom ihåg att vara trevlig, respektfull, och att följa gemenskapens riktlinjer!", - "messageDeletedUser": "Tyvärr har denna användare raderat sitt konto." + "messageDeletedUser": "Tyvärr har denna användare raderat sitt konto.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/sv/npc.json b/website/common/locales/sv/npc.json index 3cbc921894..a375b43ccc 100644 --- a/website/common/locales/sv/npc.json +++ b/website/common/locales/sv/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Välkommen till", "welcomeBack": "Välkommen tillbaka!", "justin": "Justin", - "justinIntroMessage1": "Hej där! Du måste vara ny här. Mitt namn är Justin, din guide till Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "För att starta måste du skapa en karaktär.", "justinIntroMessage3": "Bra! Nu så, vad är du intresserad av att jobba på under den här resan?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Nu så! Jag har fyllt i några uppgifter baserat på dina intressent så att du kan starta på en gång. Klicka på en uppgift för att redigera eller lägga till nya uppgifter för din rutin!", "prev": "Föregående", "next": "Nästa", diff --git a/website/common/locales/sv/settings.json b/website/common/locales/sv/settings.json index 0058c954a3..6e3b995a3c 100644 --- a/website/common/locales/sv/settings.json +++ b/website/common/locales/sv/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/sv/subscriber.json b/website/common/locales/sv/subscriber.json index eadf3ab705..9d75273b05 100644 --- a/website/common/locales/sv/subscriber.json +++ b/website/common/locales/sv/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Har du en kupongkod?", "subscriptionAlreadySubscribedLeadIn": "Tack för att du prenumererar!", "subscriptionAlreadySubscribed1": "För att se dina prenumerationsdetaljer och avbryta, förnya, eller ändra din prenumeration, var god gå till Användarikon > Inställningar > Prenumeration.", - "purchaseAll": "Köp Alla", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Prenumeranter kan köpa diamanter för guld i Marknaden! För enkel tillgång kan du också nåla fast diamanter till din Belöningskolumn.", "gemsRemaining": "resterande juveler", "notEnoughGemsToBuy": "Du kan inte köpa den mängden juveler." diff --git a/website/common/locales/tr/character.json b/website/common/locales/tr/character.json index 0faa549e82..ec8bd0f30c 100644 --- a/website/common/locales/tr/character.json +++ b/website/common/locales/tr/character.json @@ -7,7 +7,7 @@ "noPhoto": "Bu Habiticalı bir fotoğraf eklememiş.", "other": "Diğer", "fullName": "Tam Ad", - "displayName": "Görünecek Ad", + "displayName": "Display name", "changeDisplayName": "Görünen Adı Değiştir", "newDisplayName": "Yeni Görünen Ad", "displayPhoto": "Fotoğraf", diff --git a/website/common/locales/tr/content.json b/website/common/locales/tr/content.json index d1f49dc2b8..067e13f5fa 100644 --- a/website/common/locales/tr/content.json +++ b/website/common/locales/tr/content.json @@ -176,9 +176,9 @@ "questEggKangarooText": "Kanguru", "questEggKangarooMountText": "Kanguru", "questEggKangarooAdjective": "istekli bit", - "questEggAlligatorText": "Alligator", - "questEggAlligatorMountText": "Alligator", - "questEggAlligatorAdjective": "a cunning", + "questEggAlligatorText": "Timsah", + "questEggAlligatorMountText": "Timsah", + "questEggAlligatorAdjective": "cingöz bir", "eggNotes": "Bir kuluçka iksiri bulup bu yumurtanın üzerine döktüğünde yumurtadan <%= eggAdjective(locale) %> <%= eggText(locale) %> çıkacak.", "hatchingPotionBase": "Sıradan", "hatchingPotionWhite": "Beyaz", diff --git a/website/common/locales/tr/front.json b/website/common/locales/tr/front.json index 18296795a4..348fc650db 100644 --- a/website/common/locales/tr/front.json +++ b/website/common/locales/tr/front.json @@ -271,15 +271,9 @@ "emailTaken": "Bu e-posta adresi zaten bir kullanıcı hesabında kayıtlı.", "newEmailRequired": "Yeni e-posta adresi eksik.", "usernameTime": "Kullanıcı adını ayarlama vakti!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Kullanıcı adları Hizmet Koşulları'mıza ve Topluluk İlkeleri'mize uygun olmalı. Eğer daha önce bir giriş adı belirlemediysen, kullanıcı adın otomatik olarak oluşturulmuştur.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Kullanıcı Adı başkası tarafından kullanılıyor.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Kullanıcı adı uygunsuz kelimeler içeremez.", - "confirmUsername": "Kullanıcı Adını Onayla", - "usernameConfirmed": "Kullanıcı Adı Onaylandı", "passwordConfirmationMatch": "Şifre onayı şifreyle uyuşmuyor.", "invalidLoginCredentials": "Kullanıcı adı ve/veya e-posta ve/veya şifre yanlış.", "passwordResetPage": "Şifre Sıfırla", @@ -287,9 +281,9 @@ "passwordResetEmailSubject": "Habitica için Şifre Sıfırla", "passwordResetEmailText": "Eğer Habitica kullanıcısı <%= username %> için şifre sıfırlama isteğinde bulunduysan, yeni bir şifre belirlemek için buraya git <%= passwordResetLink %> . Bu bağlantının süresi 24 saat sonra dolacak. Eğer şifre sıfırlama talebinde bulunmadıysan, lütfen bu epostayı görmezden gel.", "passwordResetEmailHtml": "Eğer Habitica kullanıcısı <%= username %> için şifre sıfırlama isteğinde bulunduysan, yeni bir şifre belirlemek için \">buraya tıkla . Bu bağlantının süresi 24 saat sonra dolacak.

Eğer şifre sıfırlama talebinde bulunmadıysan, lütfen bu epostayı görmezden gel.", - "invalidLoginCredentialsLong": "Uh-oh - your email address / username or password is incorrect.\n- Make sure they are typed correctly. Your username and password are case-sensitive.\n- You may have signed up with Facebook or Google-sign-in, not email so double-check by trying them.\n- If you forgot your password, click \"Forgot Password\".", + "invalidLoginCredentialsLong": "Tüh - e-posta adresin / kullanıcı adın veya şifren hatalı.\n- Doğru yazıldıklarından emin ol. Kullanıcı adın ve şifren büyük-küçük harfe duyarlıdır.\n- E-posta yerine Facebook veya Google Plus ile kayıt olmuş olabilirsin, bu yüzden bu seçenekleri de deneyerek ikinci bir kez kontrol et.\n- Eğer şifreni unuttuysan, \"Şifremi Unuttum\" linkine tıkla.", "invalidCredentials": "Bu bilgileri kullanan bir hesap yok.", - "accountSuspended": "This account, User ID \"<%= userId %>\", has been blocked for breaking the [Community Guidelines](https://habitica.com/static/community-guidelines) or [Terms of Service](https://habitica.com/static/terms). For details or to ask to be unblocked, please email our Community Manager at <%= communityManagerEmail %> or ask your parent or guardian to email them. Please copy your User ID into the email and include your username.", + "accountSuspended": "Bu hesap, Kullanıcı ID \"<%= userId %>\", [Topluluk Kuralları](https://habitica.com/static/community-guidelines) veya [Hizmet Koşulları](https://habitica.com/static/terms) ihmali nedeniyle engellenmiştir. Detaylar veya engelin kaldırılmasını talep etmek için, lütfen <%= communityManagerEmail %> adresinden Topluluk Yöneticimize mail at veya ebeveyninden bu adrese mail göndermesini iste. Lütfen maile Kullanıcı ID'ni ve kullanıcı adını eklemeyi unutma.", "accountSuspendedTitle": "Hesap askıya alındı", "unsupportedNetwork": "Bu ağ henüz desteklenmiyor.", "cantDetachSocial": "Hesabın başka bir kimlik doğrulama yöntemi yok, bu doğrulama şekli ayrılamıyor.", @@ -302,7 +296,7 @@ "signUpWithSocial": "<%= social %> ile kayıt ol", "loginWithSocial": "<%= social %> ile giriş yap", "confirmPassword": "Şifreyi Onayla", - "usernameLimitations": "Username must be 1 to 20 characters, containing only letters a to z, numbers 0 to 9, hyphens, or underscores, and cannot include any inappropriate terms.", + "usernameLimitations": "Kullanıcı adı 1 ile 20 karakter arası uzunlukta olmalıdır. Yalnızca a'dan z'ye İngilizce harfler, 0'dan 9'a rakamlar, tire ve alt tire içerebilir ve herhangi bir uygunsuz terim barındıramaz.", "usernamePlaceholder": "örn., HabitRabbit", "emailPlaceholder": "ör., rabbit@example.com", "passwordPlaceholder": "ör., ******************", @@ -334,7 +328,7 @@ "joinMany": "Hedeflerini gerçekleştirirken eğlenen 2,000,000'un üzerinde insana katıl!", "joinToday": "Habitica'ya Bugün Katıl", "signup": "Kaydol", - "getStarted": "Buradan Başla", + "getStarted": "Get Started!", "mobileApps": "Mobil Uygulamalar", "learnMore": "Daha Fazlasını Öğren" } \ No newline at end of file diff --git a/website/common/locales/tr/gear.json b/website/common/locales/tr/gear.json index cf820df755..93ff9bd29a 100644 --- a/website/common/locales/tr/gear.json +++ b/website/common/locales/tr/gear.json @@ -269,7 +269,7 @@ "weaponSpecialFall2018RogueText": "Duruluk Şişesi", "weaponSpecialFall2018RogueNotes": "Kendine gelmen gerektiğinde, doğru kararı vermek için itici bir güce ihtiyacın olduğunda derin bir nefes ve bir yudum al. Her şey yoluna girecek! Gücü <%= str %> artırır. Sınırlı Sürüm 2018 Sonbahar Eşyası.", "weaponSpecialFall2018WarriorText": "Minos'un Kırbacı", - "weaponSpecialFall2018WarriorNotes": "Not quite long enough to unwind behind you for keeping your bearings in a maze. Well, maybe a very small maze. Increases Strength by <%= str %>. Limited Edition 2018 Autumn Gear.", + "weaponSpecialFall2018WarriorNotes": "Labirentte yolunu kaybetmemek için arkanda serebileceğin kadar uzun değil. Belki çok küçük bir labirentte işe yarayabilir. Gücü <%= str %> puan arttırır. Sınırlı Sürüm 2018 Güz Ekipmanı.", "weaponSpecialFall2018MageText": "Tatlılık Asası", "weaponSpecialFall2018MageNotes": "Bu sıradan bir lolipop değil! Bu asanın üstündeki parıldayan sihirli şeker topu, iyi alışkanlıkları sana yapıştırma gücüne sahiptir. Zekayı <%= int %> ve Sezgiyi <%= per %> puan arttırır. Sınırlı Sürüm 2018 Güz Ekipmanı. Çift elli eşya.", "weaponSpecialFall2018HealerText": "Çok Aç Asa", @@ -604,14 +604,14 @@ "armorSpecialSummer2018MageNotes": "Zehir büyücülüğü kurnazlık üzerine nam salmıştır. Bu rengarenk zırh hariç. Canavarlara ve işlere karşı mesajı oldukça açıktır: dikkat edin! Zekayı <%= int %> puan arttırır. Sınırlı Sürüm 2018 Yaz Ekipmanı.", "armorSpecialSummer2018HealerText": "Denizhalkı Hükümdarı Cübbesi", "armorSpecialSummer2018HealerNotes": "Bu gök mavisi cübbenin altından karada yürüyebilen ayakların olduğu fark edilebilir. Yani... Kraliyet mensubu da olsa kimsenin mükemmel olmasını bekleyemezsin. Bünyeyi <%= con %> puan arttırır. Sınırlı Sürüm 2018 Yaz Ekipmanı.", - "armorSpecialFall2018RogueText": "Alter Ego Frock Coat", - "armorSpecialFall2018RogueNotes": "Style for the day. Comfort and protection for the night. Increases Perception by <%= per %>. Limited Edition 2018 Autumn Gear.", - "armorSpecialFall2018WarriorText": "Minotaur Platemail", - "armorSpecialFall2018WarriorNotes": "Complete with hooves to drum a soothing cadence as you walk your meditative labyrinth. Increases Constitution by <%= con %>. Limited Edition 2018 Autumn Gear.", - "armorSpecialFall2018MageText": "Candymancer's Robes", - "armorSpecialFall2018MageNotes": "The fabric of these robes has magic candy woven right in! However, we recommend you not attempt to eat them. Increases Intelligence by <%= int %>. Limited Edition 2018 Autumn Gear.", - "armorSpecialFall2018HealerText": "Robes of Carnivory", - "armorSpecialFall2018HealerNotes": "It's made from plants, but that doesn't mean it's vegetarian. Bad habits are afraid to come within miles of these robes. Increases Constitution by <%= con %>. Limited Edition 2018 Autumn Gear.", + "armorSpecialFall2018RogueText": "Çift Kişilikli Frak", + "armorSpecialFall2018RogueNotes": "Gün için tarz, gece için de rahatlık ve koruma sağlar. Sezgiyi <%= per %> puan arttırır. Sınırlı Sürüm 2018 Güz Ekipmanı.", + "armorSpecialFall2018WarriorText": "Minotor Plaka Zırhı", + "armorSpecialFall2018WarriorNotes": "Meditasyon labirentinde yürürken rahatlatıcı ritimler çıkarmak için bu zırhı toynaklarla tamamla. Bünyeyi <%= con %> puan arttırır. Sınırlı Sürüm 2018 Güz Ekipmanı.", + "armorSpecialFall2018MageText": "Şekerbazın Cübbesi", + "armorSpecialFall2018MageNotes": "Bu cübbenin kumaşına sihirli şekerler örülmüştür! Yine de cübbeyi yemeye çalışmanı tavsiye etmiyoruz. Zekayı <%= int %> puan arttırır. Sınırlı Sürüm 2018 Güz Ekipmanı.", + "armorSpecialFall2018HealerText": "Etoburluk Kaftanı", + "armorSpecialFall2018HealerNotes": "Bitkilerden yapılmış olsa da bu vejetaryen olduğu anlamına gelmez. Kötü alışkanlıklar bu kaftanın kilometrelerce yakınına varmaya bile çekinirler. Bünyeyi <%= con %> puan arttırır. Sınırlı Sürüm 2018 Güz Ekipmanı.", "armorMystery201402Text": "Haberci Kaftanı", "armorMystery201402Notes": "Parıltılı ve güçlü olan bu kaftan, mektupları taşımak için birçok cebe sahiptir. Bir fayda sağlamaz. Şubat 2014 Abone Eşyası.", "armorMystery201403Text": "Orman Yürüyüşçüsü Zırhı", @@ -681,11 +681,11 @@ "armorMystery201807Text": "Su Yılanı Kuyruğu", "armorMystery201807Notes": "Bu kuvvetli kuyruk seni suyun içinde inanılmaz bir hızla ileri itecek! Bir fayda sağlamaz. Temmuz 2018 Abone Eşyası.", "armorMystery201808Text": "Lav Ejderi Zırhı", - "armorMystery201808Notes": "This armor is made from the shed scales of the elusive (and extremely warm) Lava Dragon. Confers no benefit. August 2018 Subscriber Item.", - "armorMystery201809Text": "Armor of Autumn Leaves", - "armorMystery201809Notes": "You are not only a small and fearsome leaf puff, you are sporting the most beautiful colors of the season! Confers no benefit. September 2018 Subscriber Item.", - "armorMystery201810Text": "Dark Forest Robes", - "armorMystery201810Notes": "These robes are extra warm to protect you from the ghastly cold of haunted realms. Confers no benefit. October 2018 Subscriber Item.", + "armorMystery201808Notes": "Bu zırh, nadide (ve son derece sıcak) Lav Ejderi'nin döktüğü pullarından yapılmıştır. Bir fayda Sağlamaz. Ağustos 2018 Abone Eşyası.", + "armorMystery201809Text": "Güz Yaprakları Zırhı", + "armorMystery201809Notes": "Sadece küçük ve korkusuz bir yaprak yığını değilsin, aynı zamanda sezonun en güzel renklerini de çok iyi taşıyorsun! Bir fayda sağlamaz. Eylül 2018 Abone Eşyası.", + "armorMystery201810Text": "Kara Orman Kaftanı", + "armorMystery201810Notes": "Bu kaftan, seni ürkünç diyarların dehşet soğuklarından korumak için ekstra sıcaktır. Bir fayda sağlamaz. Ekim 2018 Abone Eşyası.", "armorMystery301404Text": "Steampunk Takım", "armorMystery301404Notes": "Şık ve enerjik, tam gaz! Bir fayda sağlamaz. Şubat 3015 Abone Eşyası.", "armorMystery301703Text": "Steampunk Tavuskuşu Cübbesi", @@ -780,12 +780,12 @@ "armorArmoirePiraticalPrincessGownNotes": "Bu süslü elbise, silahları ve ganimetleri gizlemek için çokça cebe sahiptir! Sezgiyi <%= per %> puan arttırır. Efsunlu Gardırop: Korsani Prenses Seti (4 Eşyadan 2'ncisi).", "armorArmoireJeweledArcherArmorText": "Mücehverli Okçu Zırhı", "armorArmoireJeweledArcherArmorNotes": "Bu özenlice yapılmış zırh seni oklardan veya serseri kırmızı Günlük İşlerden koruyacak! Bünyeyi <%= con %> puan arttırır. Efsunlu Gardırop: Mücevherli Okçu Seti (3 Eşyadan 2'ncisi).", - "armorArmoireCoverallsOfBookbindingText": "Coveralls of Bookbinding", - "armorArmoireCoverallsOfBookbindingNotes": "Everything you need in a set of coveralls, including pockets for everything. A pair of goggles, loose change, a golden ring... Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Bookbinder Set (Item 2 of 4).", - "armorArmoireRobeOfSpadesText": "Robe of Spades", - "armorArmoireRobeOfSpadesNotes": "These luxuriant robes conceal hidden pockets for treasures or weapons--your choice! Increases Strength by <%= str %>. Enchanted Armoire: Ace of Spades Set (Item 2 of 3).", - "armorArmoireSoftBlueSuitText": "Soft Blue Suit", - "armorArmoireSoftBlueSuitNotes": "Blue is a calming colour. So calming, some even wear this soft outfit to sleep... zZz. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Blue Loungewear Set (Item 2 of 3).", + "armorArmoireCoverallsOfBookbindingText": "Ciltçi Tulumu", + "armorArmoireCoverallsOfBookbindingNotes": "Bir iş tulumunda ihtiyacın olan her şey var, hepsinin ayrı cebi olması da cabası. İş gözlükleri, madeni paralar, altın bir yüzük... Bünyeyi <%= con %> ve Sezgiyi <%= per %> puan arttırır. Efsunlu Gardırop: Ciltçi Seti (4 Eşyadan 2'ncisi).", + "armorArmoireRobeOfSpadesText": "Maça Cübbesi", + "armorArmoireRobeOfSpadesNotes": "Bu şatafatlı cübbe, ganimetler veya silahlar için gizli ceplere sahiptir--hangisi için kullanacağın sana kalmış! Gücü <%= str %> puan arttırır. Efsunlu Gardırop: Maça Ası Seti (3 Eşyadan 2'ncisi).", + "armorArmoireSoftBlueSuitText": "Yumuşak Mavi Takım", + "armorArmoireSoftBlueSuitNotes": "Mavi alımlı bir renk. O kadar rahatlatıcı ki, bazıları bu yumuşak giysiyi uyumak için giyiyorlar... zZz. Zekayı<%= int %> ve Sezgiyi <%= per %> puan arttırır. Efsunlu Gardırop: Mavi Pijama Seti (3 Eşyadan 2'ncisi).", "headgear": "başlık", "headgearCapitalized": "Başlık", "headBase0Text": "Başlık Yok", @@ -1028,14 +1028,14 @@ "headSpecialSummer2018MageNotes": "\"Leziz bir balığa\" benzediğini söyleyenlerin üstünden acıklı bir bakış at. Sezgiyi <%= per %> puan arttırır. Sınırlı Sürüm 2018 Yaz Ekipmanı.", "headSpecialSummer2018HealerText": "Denizhalkı Hükümdarı Tacı", "headSpecialSummer2018HealerNotes": "Akuamarin ile süslenmiş bu yüzgeçli taç halkın, balıkların ve ikisinden de biraz olanların liderliğini simgeler! Zekayı <%= int %> puan arttırır. Sınırlı Sürüm 2018 Yaz Ekipmanı.", - "headSpecialFall2018RogueText": "Alter Ego Face", - "headSpecialFall2018RogueNotes": "Most of us hide away our inward struggles. This mask shows that we all experience tension between our good and bad impulses. Plus it comes with a sweet hat! Increases Perception by <%= per %>. Limited Edition 2018 Autumn Gear.", - "headSpecialFall2018WarriorText": "Minotaur Visage", - "headSpecialFall2018WarriorNotes": "This fearsome mask shows you can really take your tasks by the horns! Increases Strength by <%= str %>. Limited Edition 2018 Autumn Gear.", - "headSpecialFall2018MageText": "Candymancer's Hat", - "headSpecialFall2018MageNotes": "This pointy hat is imbued with powerful spells of sweetness. Careful, if it gets wet it may become sticky! Increases Perception by <%= per %>. Limited Edition 2018 Autumn Gear.", - "headSpecialFall2018HealerText": "Ravenous Helm", - "headSpecialFall2018HealerNotes": "This helm is fashioned from a carnivorous plant renowned for its ability to dispatch zombies and other inconveniences. Just watch out that it doesn't chew on your head. Increases Intelligence by <%= int %>. Limited Edition 2018 Autumn Gear.", + "headSpecialFall2018RogueText": "Çift Kişilikli Surat", + "headSpecialFall2018RogueNotes": "Çoğumuz içsel mücadelelerimizi gizleriz. Bu maske, hepimizin iyi ve kötü dürtüler arasında yaşadığımız gerilimi anlatır. Ayrıca fiyakalı bir şapka da yanında hediye! Sezgiyi <%= per %> puan arttırır. Sınırlı Sürüm 2018 Güz Ekipmanı.", + "headSpecialFall2018WarriorText": "Minotor Yüzü", + "headSpecialFall2018WarriorNotes": "Bu korkutucu maske, işlerine boynuzlama dalabileceğini herkese gösterir! Gücü <%= str %> puan arttırır. Sınırlı Sürüm 2018 Güz Ekipmanı.", + "headSpecialFall2018MageText": "Şekerbazın Şapkası", + "headSpecialFall2018MageNotes": "Bu sivri şapka, güçlü sevimlilik büyüleriyle bezenmiştir. Dikkat et, ıslanırsa yapış yapış olabilir! Sezgiyi <%= per %> puan arttırır. Sınırlı Sürüm 2018 Güz Ekipmanı.", + "headSpecialFall2018HealerText": "Pisboğaz Miğfer", + "headSpecialFall2018HealerNotes": "Bu miğfer, zombileri ve diğer zorlukları haklama yeteneği ile bilinen bir et yiyen bitkiden yapılmıştır. Yalnızca kafanı çiğnemediğinden emin ol. Zekayı <%= int %> puan arttırır. Sınırlı Sürüm 2018 Güz Ekipmanı.", "headSpecialGaymerxText": "Gökkuşağı Savaşçısı Miğferi", "headSpecialGaymerxNotes": "GaymerX konferansının şerefine tasarlanan bu miğfer ışıltılı, rengarenk gökkuşağı desenleri ile bezenmiştir. GaymerX, LGBTQ'yu ve oyunculuğu kutlayan bir fuardır ve herkese açıktır.", "headMystery201402Text": "Kanatlı Miğfer", @@ -1110,12 +1110,12 @@ "headMystery201806Notes": "Bu miğferin üzerindeki büyüleyici ışık, denizin tüm canlılarını senin tarafına çağıracak. Işıklı etkileyici güçlerini iyilik adına kullanmanda ısrar ediyoruz! Bir fayda sağlamaz. Haziran 2018 Abone Eşyası.", "headMystery201807Text": "Su Yılanı Miğferi", "headMystery201807Notes": "Bu miğferin üstündeki güçlü pullar, seni her türlü okyanus sakini düşmanının davranışından koruyacak. Bir fayda sağlamaz. Temmuz 2018 Abone Eşyası.", - "headMystery201808Text": "Lava Dragon Cowl", - "headMystery201808Notes": "The glowing horns on this cowl will light your way through underground caverns. Confers no benefit. August 2018 Subscriber Item.", - "headMystery201809Text": "Crown of Autumn Flowers", - "headMystery201809Notes": "The last flowers of autumn's warm days are a reminder of the beauty of the season. Confers no benefit. September 2018 Subscriber Item.", - "headMystery201810Text": "Dark Forest Helm", - "headMystery201810Notes": "If you find yourself traveling through a spooky place, the glowing red eyes of this helm will surely scare away any enemies in your path. Confers no benefit. October 2018 Subscriber Item.", + "headMystery201808Text": "Lav Ejderi Kukuletası", + "headMystery201808Notes": "Bu kukuletadaki parıldayan boynuzlar, yer altındaki mağaralarda yolunu aydınlatacak. Bir fayda sağlamaz. Ağustos 2018 Abone Eşyası.", + "headMystery201809Text": "Güz Çiçeklerinden Taç", + "headMystery201809Notes": "Ilık güz günlerinin son çiçekleri, mevsimin güzelliğinin bir hatırlatıcısı. Bir fayda sağlamaz. Eylül 2018 Abone Eşyası.", + "headMystery201810Text": "Kara Orman Başlığı", + "headMystery201810Notes": "Eğer kendini ürkünç bir yerden geçer vaziyette bulursan, bu başlıktaki parıldayan kırmızı gözler yolundaki tüm düşmanları muhakkakiyetle korkutup kaçıracak. Bir fayda sağlamaz. Ekim 2018 Abone Eşyası.", "headMystery301404Text": "Süslü Silindir Şapka", "headMystery301404Notes": "Centilmenlerin en iyisine layık, süslü bir silindir şapka! Ocak 3015 Abone Eşyası. Bir fayda sağlamaz.", "headMystery301405Text": "Sade Silindir Şapka", @@ -1153,7 +1153,7 @@ "headArmoireOrangeCatText": "Turuncu Kedi Kepi", "headArmoireOrangeCatNotes": "Bu turuncu kep... mırıldıyor. Ve kuyruğunu sallıyor. Ve nefes alıyor? Evet, kafanda uyuyan bir kedi var. Gücü ve Bünyeyi <%= attrs %> puan arttırır. Efsunlu Gardırop: Bağımsız Eşya.", "headArmoireBlueFloppyHatText": "Kabarık Mavi Şapka", - "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Blue Loungewear Set (Item 1 of 3).", + "headArmoireBlueFloppyHatNotes": "Bu basit şapkaya dikilen birçok büyü, şapkayı parlak bir mavi rengine bürür. Bünyeyi, Zekayı ve Sezgiyi <%= attrs %> puan arttırır. Efsunlu Gardırop: Mavi Pijama Seti (3 Eşyadan 1'incisi).", "headArmoireShepherdHeaddressText": "Çoban Başlığı", "headArmoireShepherdHeaddressNotes": "Bazen güttüğün griffonlar bu şapkayı çiğnemek isteyebilirler ancak bu seni her halükarda daha zeki gösterecektir. Zekayı <%= int %> puan arttırır. Efsunlu Gardırop: Çoban Seti (3 Eşyadan 3'üncüsü).", "headArmoireCrystalCrescentHatText": "Kristal Hilal Şapkası", @@ -1220,8 +1220,8 @@ "headArmoirePiraticalPrincessHeaddressNotes": "Süslü deniz eşkıyaları süslü başlıklarıyla bilinirler! Sezgiyi ve Zekayı <%= attrs %> puan arttırır. Efsunlu Gardırop: Korsani Prenses Seti (4 Eşyadan 1'incisi).", "headArmoireJeweledArcherHelmText": "Mücehverli Okçu Miğferi", "headArmoireJeweledArcherHelmNotes": "Bu miğfer süslü görünebilir fakat aynı zamanda inanılmaz derecede hafif ve sağlamdır. Zekayı <%= int %> arttırır. Efsunlu Gardırop: Mücehverli Okçu Seti (3 Eşyadan 1'ncisi).", - "headArmoireVeilOfSpadesText": "Veil of Spades", - "headArmoireVeilOfSpadesNotes": "A shadowy and mysterious veil that will boost your stealth. Increases Perception by <%= per %>. Enchanted Armoire: Ace of Spades Set (Item 1 of 3).", + "headArmoireVeilOfSpadesText": "Maça Yaşmağı", + "headArmoireVeilOfSpadesNotes": "Gizliliğini kuvvetlendirecek, karanlık ve gizemli bir yaşmak. Sezgiyi <%= per %> puan arttırır. Efsunlu Gardırop: Maça Ası Seti (3 Eşyadan 1'incisi).", "offhand": "ikincil el eşyası", "offhandCapitalized": "İkincil El Eşyası", "shieldBase0Text": "İkincil El Eşyası Yok", diff --git a/website/common/locales/tr/generic.json b/website/common/locales/tr/generic.json index 3352cb27cf..2c6d636417 100644 --- a/website/common/locales/tr/generic.json +++ b/website/common/locales/tr/generic.json @@ -95,7 +95,7 @@ "showMoreMore": "(daha fazla göster)", "showMoreLess": "(daha az göster)", "gemsWhatFor": "Elmas satın almak için tıkla! Elmaslar görev parşömenleri, avatar özelleştirmeleri ve mevsimsel ekipman satın almakta kullanılır.", - "veteran": "Gazi", + "veteran": "Kıdemli", "veteranText": "Gri Habitica'nın (Angular öncesi versiyon) kaprislerine göğüs gerdi ve yazılım hatalarından sayısız savaş yarası aldı.", "originalUser": "Özgün Kullanıcı!", "originalUserText": "En erken katılımcılarımızdan biri. Alfa test ne kelime!", @@ -248,6 +248,7 @@ "userIdRequired": "Kullanıcı ID'si gerekli", "resetFilters": "Tüm filtreleri temizle", "applyFilters": "Filtreleri Uygula", + "wantToWorkOn": "I want to work on:", "categories": "Kategoriler", "habiticaOfficial": "Habitica Resmi", "animals": "Hayvanlar", diff --git a/website/common/locales/tr/groups.json b/website/common/locales/tr/groups.json index 3b3b35f0c1..1a2c404a0d 100644 --- a/website/common/locales/tr/groups.json +++ b/website/common/locales/tr/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Mevcut Kullanıcıları Davet Et", "byColon": "Gönderen:", "inviteNewUsers": "Yeni Kullanıcıları Davet Et", - "sendInvitations": "Davetiyeleri Gönder", + "sendInvitations": "Send Invites", "invitationsSent": "Davetiyeler gönderildi!", "invitationSent": "Davetiye gönderildi!", "invitedFriend": "Bir Arkadaş Davet Ettin", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Kendini kovamazsın!", "groupMemberNotFound": "Kullanıcı, grup üyeleri arasında bulunmuyor", "mustBeGroupMember": "Grubun üyesi olmalısın.", - "canOnlyInviteEmailUuid": "Yalnızca uuid veya e-mail kullanarak davet edebilirsin.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Davet etmek için eksik e-mail adresi.", "inviteMissingUuid": "Davet etmek için eksik kullanıcı ID'si", "inviteMustNotBeEmpty": "Davet boş bırakılmamalı.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "KullanıcıID: <%= userId %>, \"<%= username %>\" adlı kullanıcının davetiyesi zaten askıda.", "userAlreadyInAParty": "KullanıcıID: <%= userId %>, \"<%= username %>\" adlı kullanıcı zaten bir takımda.", "userWithIDNotFound": "\"<%= userId %>\" ID numaralı kullanıcı bulunmuyor.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "Kullanıcının yerel bir kaydı bulunmuyor (kullanıcı adı, e-mail, şifre).", "uuidsMustBeAnArray": "Kullanıcı ID davetleri sıralı olmalıdır.", "emailsMustBeAnArray": "E-mail adresi davetleri sıralı olmalıdır.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Aynı anda yalnızca \"<%= maxInvites %>\" kişi davet edebilirsin", "partyExceedsMembersLimit": "Takım büyüklüğü <%= maxMembersParty %> üye ile sınırlıdır", "onlyCreatorOrAdminCanDeleteChat": "Bu mesajı silmek için yetkili değilsin!", @@ -340,8 +342,8 @@ "canceledGroupPlan": "İptal Edilmiş Grup Paketi", "groupPlanCanceled": "Grup Paketi bitiş tarihi", "purchasedGroupPlanPlanExtraMonths": "<%= months %> aylık ekstra grup paketi kredin bulunuyor.", - "addManager": "Assign Manager", - "removeManager2": "Unassign Manager", + "addManager": "Yönetici Ata", + "removeManager2": "Yöneticiyi Kaldır", "userMustBeMember": "Kullanıcının üye olması gerekiyor", "userIsNotManager": "Kullanıcı yönetici değil", "canOnlyApproveTaskOnce": "Bu iş zaten onaylandı.", @@ -361,6 +363,10 @@ "liked": "Beğendin", "joinGuild": "Loncaya Katıl", "inviteToGuild": "Loncaya Davet Et", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Lonca Liderine Mesaj Gönder", "donateGems": "Elmas Bağışla", "updateGuild": "Loncayı Güncelle", @@ -397,7 +403,7 @@ "removeInvite": "Daveti Kaldır", "removeMember": "Üyeyi Çıkar", "sendMessage": "Mesaj Gönder ", - "promoteToLeader": "Transfer Ownership", + "promoteToLeader": "Sahipliği Devret", "inviteFriendsParty": "Takımına arkadaşlarını çağırman, Basi-Liste'ye karşı birlikte mücadele etmeniz için bir
Görev Parşömeni kazanmanı sağlayacak!", "upgradeParty": "Takımı Yükselt", "createParty": "Takım Oluştur", diff --git a/website/common/locales/tr/limited.json b/website/common/locales/tr/limited.json index ee54471c9d..ffa4193c60 100644 --- a/website/common/locales/tr/limited.json +++ b/website/common/locales/tr/limited.json @@ -25,7 +25,7 @@ "polarBearPup": "Yavru Kutup Ayısı", "jackolantern": "Balkabağı Feneri", "ghostJackolantern": "Hayalet Balkabağı Feneri", - "glowJackolantern": "Glow-in-the-Dark Jack-O-Lantern", + "glowJackolantern": "Karanlıkta Parlayan Balkabağı Feneri", "seasonalShop": "Mevsimsel Dükkan", "seasonalShopClosedTitle": "<%= linkStart %>Leslie<%= linkEnd %>", "seasonalShopTitle": "<%= linkStart %>Mevsimsel Büyücü<%= linkEnd %>", @@ -126,9 +126,9 @@ "summer2018LionfishMageSet": "Aslan Balığı Büyücü (Büyücü)", "summer2018MerfolkMonarchSet": "Denizhalkı Hükümdarı (Şifacı)", "summer2018FisherRogueSet": "Balıkçı Düzenbaz (Düzenbaz)", - "fall2018MinotaurWarriorSet": "Minotaur (Warrior)", - "fall2018CandymancerMageSet": "Candymancer (Mage)", - "fall2018CarnivorousPlantSet": "Carnivorous Plant (Healer)", + "fall2018MinotaurWarriorSet": "Minotor (Savaşçı)", + "fall2018CandymancerMageSet": "Şekerbaz (Büyücü)", + "fall2018CarnivorousPlantSet": "Etobur Bitki (Şifacı)", "fall2018AlterEgoSet": "İkincil Şahsiyet (Düzenbaz)", "eventAvailability": "<%= date(locale) %> tarihine kadar satın alınabilir. ", "dateEndMarch": "30 Nisan", diff --git a/website/common/locales/tr/messages.json b/website/common/locales/tr/messages.json index 9b634e8e80..cd0a75dcad 100644 --- a/website/common/locales/tr/messages.json +++ b/website/common/locales/tr/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Bildirm ID'leri gerekmektedir.", "unallocatedStatsPoints": "<%= points %> adet dağıtılmamış Nitelik Puanın var.", "beginningOfConversation": "Bu <%= userName %> ile konuşmanın başlangıcıdır.Kibar ve saygılı olmayı ve Topluluk Kurallarına uymayı unutma.", - "messageDeletedUser": "Üzgünüz, bu kullanıcı hesabını silmiş." + "messageDeletedUser": "Üzgünüz, bu kullanıcı hesabını silmiş.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/tr/npc.json b/website/common/locales/tr/npc.json index 9889dc8ff6..98ac53f7d6 100644 --- a/website/common/locales/tr/npc.json +++ b/website/common/locales/tr/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Hoş Geldin", "welcomeBack": "Hoş Geldin!", "justin": "Justin", - "justinIntroMessage1": "Merhabalar! Burada yeni gibi duruyorsun. Benim adım Justin ve senin Habitica rehberinim.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "Başlamak için ilk önce karakterini oluşturmalısın.", "justinIntroMessage3": "Harika! Peki, bu maceraya ne üzerinde çalışmak için katıldın?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "İşte geldik, buradayız! İlgi alanlarından hareketle senin için bazı İşler oluşturdum, bu sayede direkt olarak başlayabilirsin. Düzenlemek için bir İşe tıkla ya da rutinine uygun yeni İşler ekle!", "prev": "Önceki", "next": "Sonraki", diff --git a/website/common/locales/tr/questscontent.json b/website/common/locales/tr/questscontent.json index cedf8d5af7..8a9fa70312 100644 --- a/website/common/locales/tr/questscontent.json +++ b/website/common/locales/tr/questscontent.json @@ -619,10 +619,10 @@ "questKangarooUnlockText": "Pazardan Kanguru yumurtaları satın alabilmeni sağlar", "forestFriendsText": "Orman Arkadaşları Görev Paketi", "forestFriendsNotes": "'Baharın Ruhu', 'Kabakirpi' ve 'Sarmaşıklı Ağaç' içerir. 30 Eylül'e kadar yararlanılabilir.", - "questAlligatorText": "The Insta-Gator", - "questAlligatorNotes": "“Crikey!” exclaims @gully. “An Insta-Gator in its natural habitat! Careful, it distracts its prey with things that seem urgent THIS INSTANT, and it feeds on the unchecked Dailies that result.” You fall silent to avoid attracting its attention, but to no avail. The Insta-Gator spots you and charges! Distracting voices rise up from Swamps of Stagnation, grabbing for your attention: “Read this post! See this photo! Pay attention to me THIS INSTANT!” You scramble to mount a counterattack, completing your Dailies and bolstering your good Habits to fight off the dreaded Insta-Gator.", - "questAlligatorCompletion": "With your attention focused on what’s important and not the Insta-Gator’s distractions, the Insta-Gator flees. Victory! “Are those eggs? They look like gator eggs to me,” asks @mfonda. “If we care for them correctly, they’ll be loyal pets or faithful steeds,” answers @UncommonCriminal, handing you three to care for. Let’s hope so, or else the Insta-Gator might make a return…", - "questAlligatorBoss": "Insta-Gator", - "questAlligatorDropAlligatorEgg": "Alligator (Egg)", - "questAlligatorUnlockText": "Unlocks purchasable Alligator eggs in the Market" + "questAlligatorText": "Şimdi-Timsah", + "questAlligatorNotes": "\"Vay!\" diye haykırdı @gully. \"Doğal habitatında bir Şimdi-Timsah! Dikkatli olun, avını HEMEN ŞİMDİ yapılması gerekiyormuş gibi görünen işlerle oyalayıp, sonucunda tamamlanmamış Günlük İşlerle beslenir.\" Dikkatini çekmemek için sessizleştin ama boşuna. Şimdi-Timsah seni fark etti ve hamle yaptı! Dikkat dağıtan sesler Durağanlık Bataklıklarından yükselmeye başladı ve ilgini ele geçirdi: \"Bu mesajı oku! Bu fotoğrafa bak! Dikkatini bana ver, HEMEN ŞİMDİ!\" Bir karşı saldırı yapmak, haşmetli Şimdi-Timsah'la mücadele etmek adına Günlük İşlerini bitirmek ve olumlu Alışkanlıklarını desteklemek için çabaladın.", + "questAlligatorCompletion": "Dikkatini Şimdi-Timsah'ın oyalayıcı şeyleri yerine önemli şeylere verdin ve Şimdi-Timsah kuyruğunu kıstırıp kaçtı. Zafer! \"Bunlar yumurta mı? Timsah yumurtasına benziyorlar,\" dedi @mfonda. \"Eğer dikkatlice bakarsak sadık hayvanlara veya vefalı bineklere dönüşürler,\" diye yanıtladı @UncommonCriminal, üç tanesini ilgilenmen için sana verirken. Bunlara odaklanacağını umalım, yoksa Şimdi-Timsah geri dönebilir...", + "questAlligatorBoss": "Şimdi-Timsah", + "questAlligatorDropAlligatorEgg": "Timsah (Yumurta)", + "questAlligatorUnlockText": "Pazardan Timsah yumurtaları satın alabilmeni sağlar" } \ No newline at end of file diff --git a/website/common/locales/tr/settings.json b/website/common/locales/tr/settings.json index d22e9d4815..b9eda2c8f7 100644 --- a/website/common/locales/tr/settings.json +++ b/website/common/locales/tr/settings.json @@ -125,7 +125,7 @@ "importantAnnouncements": "Tamamlanmış işleri işaretlemen ve ödüller kazanman için hatırlatmalar", "weeklyRecaps": "Geçen haftaki hesap aktivitenin özeti (Not: performans sebeplerinden ötürü şu anda devre dışıdır ancak yakında tekrar yürürlüğe koymayı ve e-postalar göndermeyi umuyoruz!)", "onboarding": "Habitica hesabını ayarlaman için rehberler", - "majorUpdates": "Important announcements", + "majorUpdates": "Önemli duyurular", "questStarted": "Görevin Başladı", "invitedQuest": "Göreve Davet Edildin", "kickedGroup": "Gruptan atıldın", @@ -157,7 +157,7 @@ "generate": "Üret", "getCodes": "Kod Al", "webhooks": "Webhook'lar", - "webhooksInfo": "Habitica provides webhooks so that when certain actions occur in your account, information can be sent to a script on another website. You can specify those scripts here. Be careful with this feature because specifying an incorrect URL can cause errors or slowness in Habitica. For more information, see the wiki's Webhooks page.", + "webhooksInfo": "Habitica webhook'lar kullanır ve bu sayede hesabında belirli hareketler meydana geldiğinde, bu bilgi başka bir web sitesindeki script'e gönderilebilir. Bu script'leri buradan belirleyebilirsin. Bu özelliği kullanırken dikkatli ol çünkü geçersiz bir URL belirlemek, Habitica'da hatalara veya yavaşlamalara neden olabilir. Daha fazla bilgi için, wiki'deki Webhook'lar sayfasını ziyaret et.", "enabled": "Aktif", "webhookURL": "Webhook URL", "invalidUrl": "geçersiz url", @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Kullanıcı adı yalnızca a'dan z'ye harf, 0'dan 9'a rakam, tire ve alt tire içerebilir.", "currentUsername": "Geçerli kullanıcı adı:", "displaynameIssueLength": "Görünen Ad 1 ile 30 karakter arasında olmalıdır.", - "displaynameIssueSlur": "Görünen Ad uygunsuz dil içeremez.", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Ayarlara Git", "usernameVerifiedConfirmation": "Kullanıcı adın, <%= username %>, onaylandı!", "usernameNotVerified": "Lütfen kullanıcı adınızı onaylayın.", - "changeUsernameDisclaimer": "Yakında giriş adlarını özgün ve aleni kullanıcı adlarına dönüştüreceğiz. Bu kullanıcı adı davetler, sohbetlerdeki @bahisler ve mesajlaşmalar için kullanılacak." + "changeUsernameDisclaimer": "Yakında giriş adlarını özgün ve aleni kullanıcı adlarına dönüştüreceğiz. Bu kullanıcı adı davetler, sohbetlerdeki @bahisler ve mesajlaşmalar için kullanılacak.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/tr/subscriber.json b/website/common/locales/tr/subscriber.json index 825a8ed9a2..8482ead649 100644 --- a/website/common/locales/tr/subscriber.json +++ b/website/common/locales/tr/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Bir kupon kodun var mı?", "subscriptionAlreadySubscribedLeadIn": "Abone olduğun için teşekkürler!", "subscriptionAlreadySubscribed1": "Abonelik detaylarını görmek; aboneliğini iptal etmek, yenilemek veya değiştirmek için lütfen Kullanıcı İkonu > Ayarlar > Abonelik sayfasını ziyaret et.", - "purchaseAll": "Hepsini Satın Al", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Aboneler Pazardan altın karşılığında elmas satın alabilirler! Kolay erişim için ayrıca elması Ödüller sütununa iğneleyebilirsin.", "gemsRemaining": "elmas kaldı", "notEnoughGemsToBuy": "Bu miktarda elmas alamazsın" diff --git a/website/common/locales/uk/character.json b/website/common/locales/uk/character.json index a75dc0e465..2d5606a969 100644 --- a/website/common/locales/uk/character.json +++ b/website/common/locales/uk/character.json @@ -7,7 +7,7 @@ "noPhoto": "This Habitican hasn't added a photo.", "other": "Інше", "fullName": "Повне ім'я", - "displayName": "Ім’я на показ", + "displayName": "Display name", "changeDisplayName": "Change Display Name", "newDisplayName": "New Display Name", "displayPhoto": "Світлина", diff --git a/website/common/locales/uk/front.json b/website/common/locales/uk/front.json index 2d20122667..553fb800d3 100644 --- a/website/common/locales/uk/front.json +++ b/website/common/locales/uk/front.json @@ -271,15 +271,9 @@ "emailTaken": "Email address is already used in an account.", "newEmailRequired": "Missing new email address.", "usernameTime": "It's time to set your username!", - "usernameInfo": "Your display name hasn't changed, but your old login name will now become your public username. This username will be used for invitations, @mentions in chat, and messaging.

If you'd like to learn more about this change, visit the wiki's Player Names page.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "Username already taken.", - "usernameWrongLength": "Username must be between 1 and 20 characters long.", - "displayNameWrongLength": "Display names must be between 1 and 30 characters long.", - "usernameBadCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", - "nameBadWords": "Names cannot include any inappropriate words.", - "confirmUsername": "Confirm Username", - "usernameConfirmed": "Username Confirmed", "passwordConfirmationMatch": "Password confirmation doesn't match password.", "invalidLoginCredentials": "Incorrect username and/or email and/or password.", "passwordResetPage": "Reset Password", @@ -334,7 +328,7 @@ "joinMany": "Приєднайтеся до 2,000,000 людей, які отримають задоволеня досягаючи своїх цілей!", "joinToday": "Приєднайтеся до Habitica сьогодні", "signup": "Зареєструватися", - "getStarted": "Get Started", + "getStarted": "Get Started!", "mobileApps": "Mobile Apps", "learnMore": "Learn More" } \ No newline at end of file diff --git a/website/common/locales/uk/generic.json b/website/common/locales/uk/generic.json index 2eb095562d..a2b5a527a1 100644 --- a/website/common/locales/uk/generic.json +++ b/website/common/locales/uk/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "User ID is required", "resetFilters": "Clear all filters", "applyFilters": "Apply Filters", + "wantToWorkOn": "I want to work on:", "categories": "Categories", "habiticaOfficial": "Habitica Official", "animals": "Animals", diff --git a/website/common/locales/uk/groups.json b/website/common/locales/uk/groups.json index ff825193a4..7d44166792 100644 --- a/website/common/locales/uk/groups.json +++ b/website/common/locales/uk/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "Invite Existing Users", "byColon": "By:", "inviteNewUsers": "Запросити нових користувачів", - "sendInvitations": "Надіслати запрошення", + "sendInvitations": "Send Invites", "invitationsSent": "Запрошення надіслано!", "invitationSent": "Запрошення надіслано!", "invitedFriend": "Запросити друга", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Ви не можете видалити себе!", "groupMemberNotFound": "Користувач не знайдений серед учасників групи", "mustBeGroupMember": "Повинен бути учасником групи.", - "canOnlyInviteEmailUuid": "Can only invite using uuids or emails.", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "Missing email address in invite.", "inviteMissingUuid": "Missing user id in invite", "inviteMustNotBeEmpty": "Запрошення не повинні бути пустими.", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.", "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.", "userWithIDNotFound": "User with id \"<%= userId %>\" not found.", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "User does not have a local registration (username, email, password).", "uuidsMustBeAnArray": "User ID invites must be an array.", "emailsMustBeAnArray": "Email address invites must be an array.", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "Ви можете запросити тільки \"<%= maxInvites %>\" людей одночасно", "partyExceedsMembersLimit": "Party size is limited to <%= maxMembersParty %> members", "onlyCreatorOrAdminCanDeleteChat": "У вас немає прав для видалення цього повідомлення!", @@ -361,6 +363,10 @@ "liked": "Liked", "joinGuild": "Join Guild", "inviteToGuild": "Invite to Guild", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Message Guild Leader", "donateGems": "Donate Gems", "updateGuild": "Update Guild", diff --git a/website/common/locales/uk/messages.json b/website/common/locales/uk/messages.json index f8066703bb..2f40c07e0c 100644 --- a/website/common/locales/uk/messages.json +++ b/website/common/locales/uk/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "Notification ids are required.", "unallocatedStatsPoints": "Ви маєте <%= points %> нерозподілених Очків Характеристики", "beginningOfConversation": "This is the beginning of your conversation with <%= userName %>. Remember to be kind, respectful, and follow the Community Guidelines!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/uk/npc.json b/website/common/locales/uk/npc.json index cd0fb8b57f..2d70e6b7a7 100644 --- a/website/common/locales/uk/npc.json +++ b/website/common/locales/uk/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "Welcome to", "welcomeBack": "Welcome back!", "justin": "Юстин", - "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, your guide to Habitica.", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "To start, you'll need to create an avatar.", "justinIntroMessage3": "Great! Now, what are you interested in working on throughout this journey?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "Here we are! I've filled out some Tasks for you based on your interests, so you can get started right away. Click a Task to edit or add new Tasks to fit your routine!", "prev": "Prev", "next": "Next", diff --git a/website/common/locales/uk/settings.json b/website/common/locales/uk/settings.json index 82bf885ba1..3fb425a046 100644 --- a/website/common/locales/uk/settings.json +++ b/website/common/locales/uk/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/uk/subscriber.json b/website/common/locales/uk/subscriber.json index 1677894a3f..951159b652 100644 --- a/website/common/locales/uk/subscriber.json +++ b/website/common/locales/uk/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "Thanks for subscribing!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Purchase All", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "gems remaining", "notEnoughGemsToBuy": "You are unable to buy that amount of gems" diff --git a/website/common/locales/zh/character.json b/website/common/locales/zh/character.json index 58741ee9b8..76a46cb4ea 100644 --- a/website/common/locales/zh/character.json +++ b/website/common/locales/zh/character.json @@ -7,7 +7,7 @@ "noPhoto": "这个Habitican没有添加图像", "other": "其他", "fullName": "全名", - "displayName": "显示名", + "displayName": "Display name", "changeDisplayName": "更改显示名", "newDisplayName": "新角色名", "displayPhoto": "图片", diff --git a/website/common/locales/zh/front.json b/website/common/locales/zh/front.json index b0d0dd075b..95f7c46ca4 100644 --- a/website/common/locales/zh/front.json +++ b/website/common/locales/zh/front.json @@ -271,15 +271,9 @@ "emailTaken": "邮件地址已经在现有账号中存在", "newEmailRequired": "缺少新的邮件地址", "usernameTime": "是时候设置你的登录名啦!", - "usernameInfo": "您的显示名未更改,但您的旧登录名现在将成为您的公共登录名。 此新登录名将用于邀请,聊天中的@和消息。

如果您想了解有关此更改的更多信息,请访问wiki的角色姓名页面。", - "usernameTOSRequirements": "登录名必须符合我们的服务条款和社区准则。 如果您之前未设置登录名,则我们会自动生成您的登录名。", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "登录名已被使用。", - "usernameWrongLength": "登录名的长度必须在1至20个字符之间。", - "displayNameWrongLength": "角色名的长度必须在1至30个字符之间。", - "usernameBadCharacters": "登录名只能含有字母a至z,数字0至9,连字符,或者下划线。", - "nameBadWords": "名称不能包含任何不恰当的字句。", - "confirmUsername": "确认登录名", - "usernameConfirmed": "登录名已确认", "passwordConfirmationMatch": "密码不匹配", "invalidLoginCredentials": "错误的用户名 和/或 电子邮件 和/或 密码。", "passwordResetPage": "重置密码", @@ -334,7 +328,7 @@ "joinMany": "和超过2,000,000人一起享受乐趣,同时实现自己的目标!", "joinToday": "今天就加入Habitica!", "signup": "注册", - "getStarted": "现在加入我们!", + "getStarted": "Get Started!", "mobileApps": "手机客户端", "learnMore": "了解更多" } \ No newline at end of file diff --git a/website/common/locales/zh/generic.json b/website/common/locales/zh/generic.json index 308fd5a2c7..76f2948ae5 100644 --- a/website/common/locales/zh/generic.json +++ b/website/common/locales/zh/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "需要用户ID", "resetFilters": "清除所有筛选", "applyFilters": "确认筛选", + "wantToWorkOn": "I want to work on:", "categories": "分类", "habiticaOfficial": "Habitica官方", "animals": "动物", diff --git a/website/common/locales/zh/groups.json b/website/common/locales/zh/groups.json index 2f8b1a77f1..43f9d52f69 100644 --- a/website/common/locales/zh/groups.json +++ b/website/common/locales/zh/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "邀请已存在的用户", "byColon": "来自:", "inviteNewUsers": "邀请新用户", - "sendInvitations": "发送邀请", + "sendInvitations": "Send Invites", "invitationsSent": "邀请已发送!", "invitationSent": "邀请已发出", "invitedFriend": "邀请朋友", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "你不能移除自己!", "groupMemberNotFound": "小组成员中找不到用户", "mustBeGroupMember": "必须是小组的成员。", - "canOnlyInviteEmailUuid": "仅能用UUID或者电子邮件邀请。", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "邀请中缺失电子邮箱地址。", "inviteMissingUuid": "邀请中缺失用户ID", "inviteMustNotBeEmpty": "邀请不能是空的。", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "用户ID:<%= userId %>,用户“<%= username %>”等待接受邀请。", "userAlreadyInAParty": "用户ID:<%= userId %> ,用户 “<%= username %>”已经在一个队伍中。", "userWithIDNotFound": "这个ID \"<%= userId %>\"的用户没有找到。", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "用户不能有一个本地注册(用户名,电子邮件,密码)。", "uuidsMustBeAnArray": "用户ID邀请必须是一个数组。", "emailsMustBeAnArray": "电子邮件地址邀请必须是一个数组。", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "你仅能在同一时间邀请\"<%= maxInvites %>\"个", "partyExceedsMembersLimit": "队伍最大成员数:<%= maxMembersParty %>", "onlyCreatorOrAdminCanDeleteChat": "没有权利删除这个消息!", @@ -361,6 +363,10 @@ "liked": "已赞", "joinGuild": "加入公会", "inviteToGuild": "公会邀请", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "给工会会长发信息", "donateGems": "捐赠宝石", "updateGuild": "更新公会", diff --git a/website/common/locales/zh/messages.json b/website/common/locales/zh/messages.json index 320181b472..9dd7ffeafb 100644 --- a/website/common/locales/zh/messages.json +++ b/website/common/locales/zh/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "需要Notification ids", "unallocatedStatsPoints": "你有<%= points %>没分配的属性点", "beginningOfConversation": "现在开始和<%= userName %>愉快的聊天吧!记住要善待和尊重他人并遵守社区准则!", - "messageDeletedUser": "抱歉,此用户已删除其帐户。" + "messageDeletedUser": "抱歉,此用户已删除其帐户。", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/zh/npc.json b/website/common/locales/zh/npc.json index 309f8bf284..e6b74a1928 100644 --- a/website/common/locales/zh/npc.json +++ b/website/common/locales/zh/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "欢迎来到", "welcomeBack": "欢迎回来!", "justin": "Justin", - "justinIntroMessage1": "嗨,你好!你是新来的吧,我叫Justin,你的Habitca向导。", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "首先,你需要创建一个新角色", "justinIntroMessage3": "棒极了! 现在,您有兴趣在整个旅程中工作吗?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "我们到了Habitica大陆了! 我根据您的兴趣为您填写了一些任务,因此您可以立即开始使用。 单击一项任务来编辑或者添加新任务以适应您的日常工作!", "prev": "上一页", "next": "继续", diff --git a/website/common/locales/zh/settings.json b/website/common/locales/zh/settings.json index 23a936bbcd..cc9119bee3 100644 --- a/website/common/locales/zh/settings.json +++ b/website/common/locales/zh/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "登陆名只能含有字母a至z,数字0至9,连字符,或者下划线。", "currentUsername": "现在的登录名:", "displaynameIssueLength": "角色名的长度必须在1至30个字符之间。", - "displaynameIssueSlur": "角色名不得含有不恰当的语言。", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "前往设置。", "usernameVerifiedConfirmation": "您的登录名,<%= username %>,已确认!", "usernameNotVerified": "请确认您的登录名。", - "changeUsernameDisclaimer": "我们很快就会将登录名转换为唯一的公共用户名。 此用户名将用于邀请,聊天中的提到他人的@和消息。" + "changeUsernameDisclaimer": "我们很快就会将登录名转换为唯一的公共用户名。 此用户名将用于邀请,聊天中的提到他人的@和消息。", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/zh/subscriber.json b/website/common/locales/zh/subscriber.json index a2426a7eb6..de0bccccef 100644 --- a/website/common/locales/zh/subscriber.json +++ b/website/common/locales/zh/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "你有优惠券代码吗?", "subscriptionAlreadySubscribedLeadIn": "感谢捐助!", "subscriptionAlreadySubscribed1": "要查看您的捐助详细信息并取消,续订或更改,请转到用户图标<设置<订阅中。", - "purchaseAll": "全部购买", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "捐助者可以在市场上使用金币购买到宝石! 为了方便购买,您还可以将宝石固定到“奖励”列。", "gemsRemaining": "剩下的宝石", "notEnoughGemsToBuy": "你无法购买那麽多的宝石" diff --git a/website/common/locales/zh_TW/character.json b/website/common/locales/zh_TW/character.json index f4aae3ff17..7bedbaf923 100644 --- a/website/common/locales/zh_TW/character.json +++ b/website/common/locales/zh_TW/character.json @@ -7,7 +7,7 @@ "noPhoto": "此 Habitica 玩家未新增相片。", "other": "其他", "fullName": "全名", - "displayName": "顯示名稱", + "displayName": "Display name", "changeDisplayName": "修改暱稱", "newDisplayName": "新的暱稱", "displayPhoto": "照片", diff --git a/website/common/locales/zh_TW/front.json b/website/common/locales/zh_TW/front.json index 93693fe142..30efe0dfc5 100644 --- a/website/common/locales/zh_TW/front.json +++ b/website/common/locales/zh_TW/front.json @@ -271,15 +271,9 @@ "emailTaken": "該電子郵件已經被其他帳戶使用。", "newEmailRequired": "尚未輸入新電子郵件地址。", "usernameTime": "是時候來設定您的使用者名稱了!", - "usernameInfo": "您的暱稱不會被更改,但您的舊名稱將會成為您的公開使用者名稱。此名稱將會被用來邀請、在聊天時的@標記、還有通知。

想進一步了解這項改變,可以參訪我們的玩家名稱維基頁面。", - "usernameTOSRequirements": "使用者名稱必須遵守我們的服務條款和社群規範。如果您之前尚未設定使用者名稱,您的使用者名稱將會被自動生產。", + "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", + "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", "usernameTaken": "此使用者名稱已有人使用。", - "usernameWrongLength": "使用者名稱字數必須介於 1 到 20 個字元。", - "displayNameWrongLength": "暱稱必須介於 1 到 30 個字元。", - "usernameBadCharacters": "使用者名稱只能包含 a-z、0-9、連字號(\"-\")、或下底線(\"_\")。", - "nameBadWords": "名稱不能包含任何不適當的字詞。", - "confirmUsername": "確認使用者名稱", - "usernameConfirmed": "使用者名稱確認", "passwordConfirmationMatch": "密碼不匹配。", "invalidLoginCredentials": "錯誤的使用者名稱 和(或) 電子郵件 和(或) 密碼。", "passwordResetPage": "重設密碼", @@ -334,7 +328,7 @@ "joinMany": "和超過2,000,000個人一起享受完成目標的快感!", "joinToday": "現在就想加入Habitica!", "signup": "註冊", - "getStarted": "加入我們", + "getStarted": "Get Started!", "mobileApps": "行動版APP", "learnMore": "了解更多" } \ No newline at end of file diff --git a/website/common/locales/zh_TW/generic.json b/website/common/locales/zh_TW/generic.json index 9680294c08..c3238ab887 100644 --- a/website/common/locales/zh_TW/generic.json +++ b/website/common/locales/zh_TW/generic.json @@ -248,6 +248,7 @@ "userIdRequired": "需要UUID", "resetFilters": "清除所有篩選", "applyFilters": "應用篩選", + "wantToWorkOn": "I want to work on:", "categories": "類別", "habiticaOfficial": "Habitica官方", "animals": "動物", diff --git a/website/common/locales/zh_TW/groups.json b/website/common/locales/zh_TW/groups.json index 8508b93b88..3f10ca8f7d 100644 --- a/website/common/locales/zh_TW/groups.json +++ b/website/common/locales/zh_TW/groups.json @@ -183,7 +183,7 @@ "inviteExistUser": "邀請已經存在的使用者", "byColon": "作者:", "inviteNewUsers": "邀請新玩家", - "sendInvitations": "發送邀請", + "sendInvitations": "Send Invites", "invitationsSent": "邀請已發送", "invitationSent": "邀請已送出!", "invitedFriend": "邀請朋友", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "想把你自己移除掉嗎?不可能的!", "groupMemberNotFound": "無法在群組中找到此成員", "mustBeGroupMember": "必須要是群組成員", - "canOnlyInviteEmailUuid": "只能使用uuid或是email邀請。", + "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", "inviteMissingEmail": "邀請函中缺少電子郵件地址", "inviteMissingUuid": "邀請函中缺少UUID", "inviteMustNotBeEmpty": "邀請函不能為空", @@ -238,9 +238,11 @@ "userAlreadyPendingInvitation": "UUID:<%= userId %>,使用者「<%= username %>」已經在邀請中。", "userAlreadyInAParty": "UUID:<%= userId %>,使用者「<%= username %>」已經在隊伍中。", "userWithIDNotFound": "找不到玩家ID \"<%= userId %>\"", + "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", "userHasNoLocalRegistration": "User does not have a local registration (username, email, password).", "uuidsMustBeAnArray": "邀請UUID必須是個序列。", "emailsMustBeAnArray": "電子郵件位址邀請必須是個序列。", + "usernamesMustBeAnArray": "Username invites must be an array.", "canOnlyInviteMaxInvites": "你只能同時邀請\"<%= maxInvites %>\"個人", "partyExceedsMembersLimit": "隊伍最多有<%= maxMembersParty %>個隊員", "onlyCreatorOrAdminCanDeleteChat": "未被授權刪除此訊息!", @@ -361,6 +363,10 @@ "liked": "已按讚", "joinGuild": "Join Guild", "inviteToGuild": "Invite to Guild", + "inviteToParty": "Invite to Party", + "inviteEmailUsername": "Invite via Email or Username", + "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", + "emailOrUsernameInvite": "Email address or username", "messageGuildLeader": "Message Guild Leader", "donateGems": "Donate Gems", "updateGuild": "Update Guild", diff --git a/website/common/locales/zh_TW/messages.json b/website/common/locales/zh_TW/messages.json index 6d0e37256b..3c9e047453 100644 --- a/website/common/locales/zh_TW/messages.json +++ b/website/common/locales/zh_TW/messages.json @@ -61,5 +61,6 @@ "notificationsRequired": "通知用ID是必須的。", "unallocatedStatsPoints": "你有<%= points %>點未分配屬性點", "beginningOfConversation": "您與 <%= userName %> 的對話即將開始。記得要和善、尊重,並遵守社群守則!", - "messageDeletedUser": "Sorry, this user has deleted their account." + "messageDeletedUser": "Sorry, this user has deleted their account.", + "messageMissingDisplayName": "Missing display name." } \ No newline at end of file diff --git a/website/common/locales/zh_TW/npc.json b/website/common/locales/zh_TW/npc.json index 4165a6cde9..f5812e50dc 100644 --- a/website/common/locales/zh_TW/npc.json +++ b/website/common/locales/zh_TW/npc.json @@ -5,9 +5,11 @@ "welcomeTo": "歡迎來到", "welcomeBack": "歡迎回來!", "justin": "Justin", - "justinIntroMessage1": "你好啊!你一定是新來到這邊。我的名字是Justin,你的Habitica嚮導。", + "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", "justinIntroMessage2": "想要開始,你將需要創造一名角色。", "justinIntroMessage3": "太棒了!現在,你在進行這一場旅途中會對什麼有興趣?", + "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", "introTour": "我們到了!我已經基於你的興趣填寫了一些任務,所以你可以立刻開始。點擊一個任務來編輯,或增加符合你日常生活的新任務!", "prev": "往前", "next": "下一頁", diff --git a/website/common/locales/zh_TW/settings.json b/website/common/locales/zh_TW/settings.json index b05bb49e28..9b112df755 100644 --- a/website/common/locales/zh_TW/settings.json +++ b/website/common/locales/zh_TW/settings.json @@ -200,9 +200,10 @@ "usernameIssueInvalidCharacters": "Usernames can only contain letters a to z, numbers 0 to 9, hyphens, or underscores.", "currentUsername": "Current username:", "displaynameIssueLength": "Display Names must be between 1 and 30 characters.", - "displaynameIssueSlur": "Display Names may not contain inappropriate language", + "displaynameIssueSlur": "Display Names may not contain inappropriate language.", "goToSettings": "Go to Settings", "usernameVerifiedConfirmation": "Your username, <%= username %>, is confirmed!", "usernameNotVerified": "Please confirm your username.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging." + "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "verifyUsernameVeteranPet": "One of these Veteran Pets will be waiting for you after you've finished confirming!" } \ No newline at end of file diff --git a/website/common/locales/zh_TW/subscriber.json b/website/common/locales/zh_TW/subscriber.json index 437579538d..28c1685642 100644 --- a/website/common/locales/zh_TW/subscriber.json +++ b/website/common/locales/zh_TW/subscriber.json @@ -207,7 +207,7 @@ "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "感謝訂閱!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", - "purchaseAll": "Purchase All", + "purchaseAll": "Purchase Set", "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", "gemsRemaining": "剩餘寶石", "notEnoughGemsToBuy": "你無法購買該數量的寶石" From c035435476883fe494649846e2b04e1ae40881a7 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Wed, 14 Nov 2018 14:39:39 +0000 Subject: [PATCH 10/42] 4.70.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0afe237bc9..1016465c33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "4.69.2", + "version": "4.70.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 1203e1731c..4fa6d34028 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "4.69.2", + "version": "4.70.0", "main": "./website/server/index.js", "dependencies": { "@slack/client": "^3.8.1", From 07cbf4526539f77d62c20986363dacb54952aa5e Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Wed, 14 Nov 2018 16:31:35 -0600 Subject: [PATCH 11/42] fix(chat): less intrusive highlight and better margins --- website/client/components/chat/chatCard.vue | 4 +- .../client/components/chat/chatMessages.vue | 68 +++++++++++-------- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/website/client/components/chat/chatCard.vue b/website/client/components/chat/chatCard.vue index f992148b26..a7984c222f 100644 --- a/website/client/components/chat/chatCard.vue +++ b/website/client/components/chat/chatCard.vue @@ -211,7 +211,7 @@ export default { const escapedDisplayName = escapeRegExp(displayName); const escapedUsername = escapeRegExp(username); - const pattern = `@(${escapedUsername}|${escapedDisplayName})([^\w]|$)`; + const pattern = `@(${escapedUsername}|${escapedDisplayName})(\\b)`; const precedingChar = messageText.substring(mentioned - 1, mentioned); if (mentioned === 0 || precedingChar.trim() === '' || precedingChar === '@') { let regex = new RegExp(pattern, 'i'); @@ -294,7 +294,7 @@ export default { this.$emit('show-member-modal', memberId); }, atHighlight (text) { - return text.replace(new RegExp(/(?!\b)@[\w-]+/g), match => { + return text.replace(new RegExp(`@(${this.user.auth.local.username}|${this.user.profile.name})(?:\\b)`, 'gi'), match => { return `${match}`; }); }, diff --git a/website/client/components/chat/chatMessages.vue b/website/client/components/chat/chatMessages.vue index b9fe937aa9..65a487695b 100644 --- a/website/client/components/chat/chatMessages.vue +++ b/website/client/components/chat/chatMessages.vue @@ -1,24 +1,21 @@ From abcc77b7d6b0a8070f23e2b7a73e49eb2d9e9f02 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Wed, 14 Nov 2018 16:46:03 -0600 Subject: [PATCH 12/42] fix(chat): more width tweakage --- website/client/components/chat/chatMessages.vue | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/website/client/components/chat/chatMessages.vue b/website/client/components/chat/chatMessages.vue index 65a487695b..926149ef1e 100644 --- a/website/client/components/chat/chatMessages.vue +++ b/website/client/components/chat/chatMessages.vue @@ -47,7 +47,8 @@ @import '~client/assets/scss/colors.scss'; .avatar { - width: 15%; + width: 10%; + min-width: 7rem; } .avatar-left { @@ -58,6 +59,7 @@ .inbox-avatar-left { margin-left: -1rem; margin-right: 2.5rem; + min-width: 5rem; } .inbox-avatar-right { @@ -90,7 +92,7 @@ border: 0px; margin-bottom: .5em; padding: 0rem; - width: 85%; + width: 90%; } From c2fe04367f83d1ab52375bd7c31a47f78f31a0a2 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Thu, 15 Nov 2018 15:58:07 -0600 Subject: [PATCH 13/42] feat(content): Oddballs Bundle Also includes one more tweak to @mention text highlighting --- website/client/components/chat/chatCard.vue | 24 +++++++++++++++--- website/common/locales/en/questsContent.json | 5 +++- website/common/script/content/index.js | 15 +++++++++++ .../script/content/shop-featuredItems.js | 4 +-- .../quests/scrolls/quest_bundle_oddballs.png | Bin 0 -> 1913 bytes .../promo_oddballs_bundle.png | Bin 0 -> 19252 bytes .../spritesmith_large/promo_seaserpent.png | Bin 97085 -> 0 bytes .../spritesmith_large/scene_dailies.png | Bin 7529 -> 0 bytes .../spritesmith_large/scene_sleep.png | Bin 0 -> 11332 bytes .../spritesmith_large/scene_tools.png | Bin 14752 -> 0 bytes website/server/controllers/api-v3/news.js | 20 +++++++++------ 11 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 website/raw_sprites/spritesmith/quests/scrolls/quest_bundle_oddballs.png create mode 100644 website/raw_sprites/spritesmith_large/promo_oddballs_bundle.png delete mode 100644 website/raw_sprites/spritesmith_large/promo_seaserpent.png delete mode 100644 website/raw_sprites/spritesmith_large/scene_dailies.png create mode 100644 website/raw_sprites/spritesmith_large/scene_sleep.png delete mode 100644 website/raw_sprites/spritesmith_large/scene_tools.png diff --git a/website/client/components/chat/chatCard.vue b/website/client/components/chat/chatCard.vue index a7984c222f..e058050a72 100644 --- a/website/client/components/chat/chatCard.vue +++ b/website/client/components/chat/chatCard.vue @@ -41,9 +41,12 @@ div diff --git a/website/client/components/tasks/taskModal.vue b/website/client/components/tasks/taskModal.vue index 090e16617d..9e66829d30 100644 --- a/website/client/components/tasks/taskModal.vue +++ b/website/client/components/tasks/taskModal.vue @@ -478,12 +478,17 @@ .category-label { min-width: 68px; - overflow: hidden; padding: .5em 1em; - text-overflow: ellipsis; - white-space: nowrap; width: 68px; - word-wrap: break-word; + + // Applies to v-markdown generated p tag. + p { + margin-bottom: 0px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + word-wrap: break-word; + } } } } From 42b146d5d01e178343478358cb8118330c5d8016 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 26 Nov 2018 10:45:42 +0100 Subject: [PATCH 39/42] Attach client to chat messages (#10845) * Attach client to chat messages * Word * Design tweaks * Fix potential error --- website/client/components/chat/chatCard.vue | 3 ++- website/server/controllers/api-v3/chat.js | 6 +++++- website/server/models/group.js | 4 ++-- website/server/models/message.js | 4 +++- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/website/client/components/chat/chatCard.vue b/website/client/components/chat/chatCard.vue index e058050a72..dd5de80a9e 100644 --- a/website/client/components/chat/chatCard.vue +++ b/website/client/components/chat/chatCard.vue @@ -15,7 +15,8 @@ div p.time span.mr-1(v-if="msg.username") @{{ msg.username }} span.mr-1(v-if="msg.username") • - span(v-b-tooltip="", :title="msg.timestamp | date") {{ msg.timestamp | timeAgo }} + span(v-b-tooltip="", :title="msg.timestamp | date") {{ msg.timestamp | timeAgo }}  + span(v-if="msg.client && user.contributor.level >= 4") ({{ msg.client }}) .text(v-html='atHighlight(parseMarkdown(msg.text))') hr .d-flex(v-if='msg.id') diff --git a/website/server/controllers/api-v3/chat.js b/website/server/controllers/api-v3/chat.js index cb73d2ada2..d4e38dd730 100644 --- a/website/server/controllers/api-v3/chat.js +++ b/website/server/controllers/api-v3/chat.js @@ -175,7 +175,11 @@ api.postChat = { throw new NotAuthorized(res.t('messageGroupChatSpam')); } - const newChatMessage = group.sendChat(req.body.message, user); + let client = req.headers['x-client'] || '3rd Party'; + if (client) { + client = client.replace('habitica-', ''); + } + const newChatMessage = group.sendChat(req.body.message, user, null, client); let toSave = [newChatMessage.save()]; if (group.type === 'party') { diff --git a/website/server/models/group.js b/website/server/models/group.js index 1bae6115f9..9a0d4c2d29 100644 --- a/website/server/models/group.js +++ b/website/server/models/group.js @@ -480,8 +480,8 @@ schema.methods.getMemberCount = async function getMemberCount () { return await User.count(query).exec(); }; -schema.methods.sendChat = function sendChat (message, user, metaData) { - let newMessage = messageDefaults(message, user); +schema.methods.sendChat = function sendChat (message, user, metaData, client) { + let newMessage = messageDefaults(message, user, client); let newChatMessage = new Chat(); newChatMessage = Object.assign(newChatMessage, newMessage); newChatMessage.groupId = this._id; diff --git a/website/server/models/message.js b/website/server/models/message.js index 2ba3235c39..f93d90ccb6 100644 --- a/website/server/models/message.js +++ b/website/server/models/message.js @@ -19,6 +19,7 @@ const defaultSchema = () => ({ flags: {$type: mongoose.Schema.Types.Mixed, default: {}}, flagCount: {$type: Number, default: 0}, likes: {$type: mongoose.Schema.Types.Mixed}, + client: String, _meta: {$type: mongoose.Schema.Types.Mixed}, }); @@ -100,7 +101,7 @@ export function setUserStyles (newMessage, user) { newMessage.markModified('userStyles'); } -export function messageDefaults (msg, user) { +export function messageDefaults (msg, user, client) { const id = uuid(); const message = { id, @@ -110,6 +111,7 @@ export function messageDefaults (msg, user) { likes: {}, flags: {}, flagCount: 0, + client, }; if (user) { From 33e0892e95b168a54b51ea6d98d3389009487032 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Mon, 26 Nov 2018 12:59:23 -0600 Subject: [PATCH 40/42] chore(event): end Thanksgiving tweaks --- .../images/sprites/spritesmith-main-10.png | Bin 169438 -> 169318 bytes website/client/assets/scss/variables.scss | 8 ++++---- .../spritesmith/npcs/npc_bailey.png | Bin 10492 -> 3673 bytes .../raw_sprites/spritesmith/npcs/npc_matt.png | Bin 6004 -> 5861 bytes website/server/models/user/hooks.js | 2 -- 5 files changed, 4 insertions(+), 6 deletions(-) diff --git a/website/client/assets/images/sprites/spritesmith-main-10.png b/website/client/assets/images/sprites/spritesmith-main-10.png index 95215a74e8005f38a1e7cf84c01509fbfef9fe31..5519dc98750a687d3c435efd0037b67563a6b231 100644 GIT binary patch delta 105212 zcmagGdpy(cA3uyDhe(8y4rGckl|!Y_Ne3$`jM*?1!bT<`hf%7JbiizL2&E{8F~(bC z&Xt@?u`y8?l^h}@r~4Z9`F?(n-+e#sfAC;?@48;s>+pO&U$0Adw&XyTWVE`lPCjg9 z2X6Zq>fY>@+BKX5aS?}W?jiLp)e`>^JDq6x?A#^PZpvM=TW<~=J$WKwa5aBHnze4X zyu=2ny0{CI4OqNzHYh0d*5kVHJZ2Mb9VgVOWAd@bqG_`qq!HuX@)D{ z3Vz`_td$tID=}q0O(MU)2n0SM+h>fSUoznb< zGSab{h<+FwRs{KbW0d;OccVtatP6y)_2Vg0BqfH7>D*=V_mVK0lwn=Q`Te&GpX1@) zmWuc~bFP+%IMIZ*8}`Z3C&zcF?vW@gBA!3~ zg1A3i;Ef{Cj?v5)-SV5D!+2%Vso}i`UpXT~@8Nz}dQZyfy^sqrM|NrCp9(!MwR}4F ziz8$$u8?=F-l&Vc#J^^liG#PNrE)#u*Js}$X=VSaP?|kz`^%mFUJ5*BQg!JZmTf`~ zSCS{$Ofg*Gy1$U(mk%Lmff%{F^-|Eq;K7@$N~#pjJsw6Z>A!+!7$)-IKqL4W7F;en5XQ~*cu3B43KgRD6+-WQpxbf$cBXEKV z?G{!!!2O_Ny0UBC;Fs$+>O^X<9Lc@1GN-8$b-1w==h<|66Cq@f0Fz=>78I<~R>F^q zYU8pmR@%S#;>-)$Qr?6r4S7xAa4q(ZK88 z9ub!Qu{)FJBay92dsv*V%F(QO!0FPd2Yj`ubW4g|Cnt&VH?cFdvxPw!d z#E9K>;)c#XZ{!Uf;7XbCWumSWUDugv>Mc|cC);hK0(18d5$dhoPPy}M+m)DUTWL}O zb(1d+Qi2hP_;f;r)SdtqzCwyPv!DXQmofSg7zsN$djEK*N-p*`{gmdP90H8V2{Jdm z;ORRS=fRClRbD}M`mC`|5}49m3KM+(Z`KloMg9tTlGZBjc=A2iA@fp)BXF9F`pBiX zeFb-=@a}uls;E+-tj4Xrfe6F|6zp?6DFNoqId^{ol50L1C4xzk03R8%dZvu?NmJ65 z!nxpc_hb+^w&)H2I=ZTn&Sq4i22?qQ@~(xat)&@Q>LBH2w2INYAFpyQHrbmi+Ory4 z$6t|h!f#kYZ8&6U-qGCf?RSg(63Srtr>aqLmq39rYzTDjH2DzSz#n|BYFpC8GoQwb zu?*F-q=@d!;^3Hubd{zCF(%d(N7?S`Qok`!nxVhCwd70sO-NbHy)7EKLR-2yxVS@< zRajr^7rt|b-S7J@8ZHS^(DPPTcVUdh4xU>JroRhL5ToL?s5G7xbx`6@#aqX%e?9Se z?ESe{Zg>iejQPADR9kuE}fy|@Fi3$sgfJYeQEmNF9%{J;K~I@tF!}4BXnr|iMT*afik|X z14A^qRA1QHe`TXyJ=sszT&YL5?oK#e)!?A$unFTX{6LhFW4Pk=f8@@C3Dl ziJ&}ZtE??b-1!4leu6gaQLLH0$d> zv%#GK^IiqDDzUJY+3Q2=YFDu8g_!CmSfApcV02@fc`>=JZ@VakqfN(?C;QHuuMXEy zy7V?HJW5Lc()xak64$)_u8uVGy6NCezpA~`A?J2^BXf@*K`5ycg`Ze&rFlC*I%LF{ z6{2uJ4X=<|tYE0{2FB6c0=FeU?w2RI>33Ec{$fh(XSUskh*K!Eno=$1@QJ{|!PKie ze^_*JABO8VeTbIrE7&ZtpIEt_?VS_Xyc+k--f-X0Gq(G3D)F+(bx0H8X z(lYTzb~`F-BlT&$I-Td5{`RDGTHMq}APAj^aiRN8N$xp8$M{JhZ z1I~fd7lrP;t3#MajP*-hE^j%TRLmdmau7P3dpxP`7)5(b1Tw#+Bb}7i*iEd`X085{ zl|`X2`iGG7$Rp2NLrcs>1Sw;=w5@f9&q-E4iz+%$5i7d{C@mxfd08_JBo~TKDmQiq zRU9&BS}dKz2`Gc(7?fb=`cBgFe||#3&dVXs%B#=uJ267HGnc4 zN7`^oIT0kZ;j7Y*gLfgTqp@!5`tP)=#i!$+-NK%A#lwaMtMAhLg{Td?m9`C%?&fr7NthCYV$W^e*`QPrOk1^#uLYL;gRjjB zG-rY~5zag8xpaozu^Ov-Aeq?tE1<@drug(uPsOim;pF@qo5)RHV5HL^2Op7p7VO;M z(oMZ}sgu2(7I+e|ex1u}kXM04)m&LyZR39Dnnq4AcZ(f7sEUgkGS;_k$vh{GDUXMF z({wz!u@ax^4TW^%QPouJu?+5adYm8&#OA25Y|A6tu7sF&@ADmanbcINaNUY|L*~w& zi091?C9j7{%g0EepRZL&fRqKvJhwM+4v9fxUMmUckruL%m|)9~LYGf4^}&yV9Mds(%<%|J zIyU&-@tRH2PKAUqQC;bQG<-$Furi+2$Zf^#Mjk;BWD*-L_^j2Kd1K?KlQ*&QPb#Rt ziTaxq1l$LOe##HsAAeDioFAyXQ;;Vr6$h<>&0qbX9u=X#ayZR)KFlph;23l}6Q=I$ zNy5QT`FxUG#I{~5oV`g_h0BwoqIOoIBG6`Xy7~d*W(a`Wh-L|Od?|gzCs?-5==GzB zFv^`{9j3~zq7D3;qR z)u#hk7QNs)onKb`VERGNwc1%;o`3D^Y@Vf(dqB_&Y(PaJ>9&qiV;1ibg)SzISie@3 zf!zs1`xae%0su;KF(^MT21GD`hk{T#yS3F{aU+8g+^;2eSP{~%Y#ktg^kVPcRylOz z(_*vC&~IoRdN<=Pmq53#tQ#BZmZ~v5))jnw4P7zOSSnQ=I_&UG~6%fL#z`e8t1Qlmy&)FcDaR}fv!=|>X} zA<#U3}dgrDyl9ByBO@T=C(U4?Z$08A!r( zcjCfY^*Yc$d)Q@r$p?lvY|s1)oCWnN&Q}Xqq&EO*7-I1G!=BRDL2oL{dR#D|C$Ue-eob}-ed%e$`O&mnfOy*|GHj^tT)oW>Ap}es2R{O$&J`vF6%K#EH7GIE z#aNB`L}2(={e2~kb>k_;dwj`+`(JNd2z)<|Nl4`XQn)$S{72JS zOWwI!ado{iWd5+onyUA#o=C=yZ6FaC>8iGI9l)Tf5l8p#@QA1608Yr@N3C^{z!cQ3 zNxhU^O_f@|ukmv%DOvf$+f;fHT0|#)x{3zyT_+DwZ;y`*bPKs?fFIy(a3hu>I2wHVEf=f0_zb4 zx~p3`Q;kadbGm17QBhy{rbZK zvtbU@L7n3W09whm7R(Zm6{1AQ*Z8U=I{rHS+%}7Xfm5)x&kn+X#qI`KDulLu`XIzS zFI{o{?ZQmD%#T~7+_k~d&eG*~WVvbllDzlA5VrR^R$!8+LJ(Hyji@qqXSOydpGmOw z?!}(bad$l4W;9K;dQFGqSck=oe%I;gF~((ok8V(cF7l0F2Us|&E?~T*(ob07tr%uI3(kw~v+x6sPgI>{kf zbl_oxR#&Se(zw(Z?La~{>Q<<)r_+MZu}{l&QFomOD5H3E*cgh+hO2`xG8axy|0Rin_& z2_jEPJC?{8AlMt2d3w9#SQo=}4vU{$!EN=jY{$~Af%N3+&U}t#Xrd{Amb(R+1$OQD zC5{ir-ux)ruEdHp2tuN2G?o5&_id$J=A}3%r=H2ZKuo|>#F+JRkp7vsJFEHSa{eQ! zt=%Y~hBSG%hSiBO^`l$EPI)CAMVPVX5xy_5u0;1oeNouXmcylax&gos2^9@c-F&L{ zasmR&TgM&0nM*&Nqk8G)TZQW=arEcZ8onO?+8O|Mb;xII*Gut*F@Rv?+qYe7BM(mO zBW1wwH=PXDi=ckBMbN~!3PX>pI5My6M~%6MJ2(QNNBxL%gD6mfkqEK}w-q{_Y@5FI zY+Tlv^v25A>EtVQlTbOs=4o$!p-caTbmhp{N#B)Fs}yucl_T~p0x%gP{;(WNe+(23 zf(7-Z5*mD+p3AxT`D|eFv=Qz&73#qrJaZ(s>9cL%@M@*X)^Ac6gkQo1KG^4Or?QQS8W1d-TB0sNGtlh-8S&+AM zpc}cdbOGkj)mQh-MWL&y_^MBlP~G8NwJ;dtWLhlt*bM=Rm$G*Uek+RiITwAnzn~3d zUBLzuvSFB&S%n$b#DLSZj5|Clu*ACJ0j4$zg3I?DI2x`aeWM?*5vig4=uJuGF|rtj zv!;WG;)N275xy@0s8tHl9~(~|Oefr!(rc|e8#HoutDuaCE5(O{97$Pezp>)lSXIF2fU6ZrNWT(VNQC7W7 zp`l3o5!!bJZ*gqrIDejUBSQADxGKBKTm(NOLT$ftONVv$YLI&6IWLY7veY|n1Lmt3 z24QMNoAIhdT?4WcsM!Fe7L1q6L2Aw@qbHQn13A`vMBh-FfLJ<}2{B(6LVky~NWh{T z?JvQ1nRO#J?Ba)I@jB{xd?UW$iNaXMF&ZK{| zZSIeqrW8M$xT}MMGh?zl4y{Uv)#5y9>TlJ`KXo|rs3Q8=3_A1Hvx1e{v<~OBS;KA} ztvFO1r?|?$c&9VSvg+%B5|I5l&amNRcdm}EH|=tU@WTil*8JelZVswOo6t-Xvmx>> zS_vQIw_R*%6|5hu7V$Fw#9}zTY5SbkAt`(GZoQ};OUBKR)2v%&;-96L8Pdabe^L_w zN2u6c$mU$o3&=gbLer^{h<*@^m1Y(WPn#jC$$MrIqzsjvL$n@wuzT31Ldgn`otW}# z(LF)`dnR?eD@~^8*V#Qqb<$ozfebbOZD$q>%zl6+ecSJiL~P@1eUfM1uFt zh>wELJ_zT!_8U;x6lgG^!}~m1q9#^$`!B0$dq=`_;zFd! zsd5`gpGEYPdbx`(5$MbSEH0`~MoIu#ocr_s)+=Fv zMq+WmKo^TrV^Gq}F#6BxoC*y~h%(k6B`^^&&L{%1?ZYU-dgY}>oKHEtmDDf*9F?y^Tz>qdizB6 zU3S%j{W*s3>y_RWcAKV$M3#lV>4u0S@c@TB(in`ZyZ^QD_VClSr|}L;WCPR?@{d{n zv8q)`M|JW-UWta1cg?B7VG1m))@bRqHX)2sp*f0^W7OWxXZ<>_sI(@a=Z`)kiVy#< zWf-qS7gkqlcUuW#a8fP+Jw?c#%VqGTjv=N2uKrx3#5xBM#@V-83XF7v`m5%Rt**D- zas9h(k%sl77|^Q8Ok0aC#h{~uj_$d5Z@6-A#CMYHOM?y-*|q?xe> z{wGn@?P)Z{P7i>%+hVt-lR%z1NIXWtz7}PqB)3<$i_(FzndE1%?U&E(CaWyt+KX*U zvt-seiCZy)Z&lU{PIr2H^U!Nr2cCHNaMUXha^xaw!?{eX|nF96xo=Nv=RMdDPc4c!AneSj%ULfrM> zJ!<+!JOr0+=pQ!QvS&YY-y5VT{-k!a-cxnQ6CdLB(;^8m31>u-)Ga{&ndSrfKOSFz z3{xIPGBEk&6K6eKF1NDCscDydvPUlWp2iL0wlW z0A=Pk2Uf3I)xO7B$@2IGBRGaYY~0SL&Q!xv^P~&usx;(; z$^Z#q0Q_b>;I~T^IKc9i&nj*jS+;)@Nq{+Va3k$Y#m_dn{z#Do-n~Ph9?Bk$y_WW* z2}ukW16W;Fr{3^*f>eg;eOQ<&=z#_5de4zM*J> z&V%@S-~oB3j%K$uu0^)@I4Cs|g=HeobnXWFeV`NTZiBXt61Q~#LvlayRQTR4l-_|M z5l1;@VaeQgY^B%b?0SfpESFN)lK`3-FSUn#-p{M8W>EGIN=$gnH$OTVDlNSY@gdJ#Gdk1UijrA-TjuFxv0K zl+keuW9RP~$Kvz(=Ll5A?V=qLm}1e}kB@?4%U^|w)Q#5wT2IMAJ0k$#tm{IZ@=}I9 zXNTRA1Y(DYvIWapv700M2CG$U#dDPoiM@%=(`uu7JGj$kRtRrAMBWMKMZ>LdaP%d9 zkU$Rmk)lcWBRSk|G!H!FM*dD?tSc%)OdB_B|M3K9B$tMW9o8F0jWMN8M;m*%VRd zQaFPx|HPNFk$ZNE2SMPkchGg$Lf-EjTF@LOI2=6MTo`*sLDWTGKjA<@K)rK5|fEE!wkD+8S6@%6abx}{X_Li%!1F=LJUe0 z!>nKxq#qI6@bp?BE{d4bxX^dsa833)W}&%p5VAYvBv9p19)lot0jgcscF9Te#o%`v z4HSp(P*MH2_w?5ZK|o$`ZtyRs=+Xv7h1bCf;pKKNNnQ+CvGkIY-7kJRmiTdg(XASB z%_Ec0aN|LNi!S-yDkWN}q_7mJQc)Dz+bxHSibLKS7`=49Z9&DgJ<(jCxpmrZ80g=a zW3AuDfPtBUGSH2?zok4Au@xL`eEP@Sa9S_|NWmJO-2#719lTz1#?I;C_|5opIm{1} z4i5w~6A6$p;u9!0M|VV8$XYW(6qr#Y_ zWTw7N*JQRtVs@Zm3%48!NEog@uGGGCd$mw|l0zzn@#p<+=El+&%0p}b#`=e+l7Swrg5}I5UFrZ<0;sxt6h`qC0wcAc_emL_nx4ACy-G@AvFoE?z zcOAPEsTL*m;)V5L%1d2VvyVeISH{bxquph`)36j@0eWu&S}ymr5PhL@wYCJwt|I~s z;?V3x<##>7<_iY)Q~L5S^Hk{@f6(x0;ERLo_t44Z0K%vPu2-%}Wd4#r)*}U#6AF;fdH3vLPJ=3!wKbcD& zQuwtN07T>dk561eZ?l3Fo~8m1*J;iaoS7o<^j7i00)-b>bKX^|GxzzYJyDH2x&cjN z*~(=FJCl%@XAwG1U)}*+n4caVCv~_^F(DP!o=LcY?dI<*(I(%KI`nYeMN@no|H&f& zmuGUfw>{uX5z4_}Bj#J)3n6VVE3qQS+8L#VL!Q5P6rmIl8=p=;j>1^R4RfNA&E2gj zd2EN~!B}4KV%(HOc9WDZCLAZzRkE8`(+VeJsoxh)%^O zITVTPs`eZHAKj8XC!pO1aw$;4&L@O4k1&2gu#u_%---e9;8UUH;sJiFKDh4+FAju4!Bh|80lb(zu~I<(;-;-t4*UNqyJ#u|(n&ad+=3=Eqk;dpVod>o z17#08-!3fnv;V4yQO5W*ov2pKgF48vPwyX?Yz#2{^`lsAe&In+RN*gLnxyb9iH{an z)D2IU^k1WONeb^FsWH+UTVmsF+QTSdf+-9Jnv}{ccFwKy_D_KLNv!i=_{~R`5geu> zA8yKMTKhib!u#_(6xx;8{UH;#w&%XoUfLF*AyEqpCvn7teEvq-?0a2C8oNO(oGIZC4%@OKt}y0R*w+^` z$9eTUn8geVLt=K=0M7E)BL06{cdCD@wS<5`|1q8? zX8nM=D_NDb_wumM?C1|t`+={NfT$a&fQp>kIubhoBr&%h7u8kbW}*5Hf;r1p9NauP z8d;UIBMh{4iN;%%ysN>0M2lH`s)8shIJ|D{UG@mZ(Nw8t_}$yA1H$k&hC#^TAWY=$ z@vAKMLkHLoz|2{j1D&K((i%SliKiQJ$h?{=b`BwsP#yHQ>gJtJp+{&DG-wTM&`{2` z>(X$x3da(YzlL2}j`xSi!LIKc1q|eIrQ)nnJ)8U>X#=SU&8?3krW|}xxf*{~@W;>7 zvGYP;i?E1`8}SOOa%Br;z7s9kuMYju+W*6#1-}7Drb(iSe-;27TolI&Om^6GZ#OEB zPd7kMK%lX%Jn{wzX}_AgiJ7|iy1}9S-VH8d8yFN!;FZ*nQzTF)0Cc8JKGWM7^D`s_ z;6JrEtg8UYk&hdmv{QQCn$?th=Q#0*LhM<|9XkcJ8k&wjISj+GppDLpD)yF5D_U<~_9{+3$-?3h0j3x9Oj z!+S^0EV+*0m6y}VMvaNSEsGr`I51m-G;Gs@uy425?*@WKb8Bqzn!V1X2>LB_LAhQv z7N{m+^j2+O%-F1)p(K8-V^5kI=m4+|Qp8Rc5J8dXF+ZZ#GYBg_&NCzg0bUCr$CIj5 zkl=Yh^Ou9}Xpc&q11J3|Py{f`!LEqQfN2)c<({_ZIwZx_`(-o$3wZWMF!4+UmbmIN zAH|UbDfRC-G)w|gH!KQyK^^{LW-O0F^cApgISGi~^5cNpfKs~_obbQYf9=v<1+6@v zl*%DF{-~U)ivLpZ^iIaf9wO$53n3FJu~FdCOZ(d=gi$txNiq9(cYa^?DPOODPxoK@Err0+ z>#-5S5C9Q=k;|^PWUC*7Cx2bBJX}Hn6LDB&`?`9YUS-cGCYDb17Yz+HMWBX;&&F4f=mE&7v&*Q*42# z(+QO+&t*jzq{%V+zw4m)r6QBsK&4QV?E}=uEWjac&Ot4rPliE}U`#gZwQzq|Q`z3Y z5Vx>-i*Au5`orSM-ud?gf8LWcoxEoee`G@M0>JN<{ep6V0n0yWs1Uy-#`-p&2EibZ z*Zw1fto_%8gh93hA+v8#L-3gbKVhfH9X>IW^5sQi8wg{woyY_Q*ih*_m<6e4>o}3P z=6*$k{DQlq6C%(F_sf!vYF`(?po@yc!2;zkFAmxi2*K+o?(Eh>nmBa;aHF0BZH`2@ zSa>?ag)O|2*m{1!9OYwlT9A>z5j%APM|?VCI{NA!Bb8poD+Wg5~_l z?t;kQ_s5x0u{dN+#tvpNz*C470@eBdZ=MKri{*jpC!Z%0=HgJQ)1l zK@G*q&(li~3M{KN92bDg4DU(+6^F| z2K){z5RTNXe&ZWCt~DqTA=UWMSH9Zkw!khVhS|TNoAg)V293A>w`A111*-Q91ve(l zMaAmsYfl#s@-aI>`a2x3%`&9YbNr141PF>>mCX@?Q+!}79VBd%T*xBQMbL&bL^DhD z-z+KX|E4+mDI-!l7*xNGPFRU4r@Vm;`Yr|ha_DO$2}}dF-K(}5teOJ@TL<}L>3m)d zY5sd1Wv}Meh&|)$1o-0b%fRM{7J}FThp+<3q{+LGHOkUAu(%V=+*ayI1298nyKb&^ zAovGq`BRjyo`|Z~$cfkpO60fwgPvH97KC_1$uYl_1iA$}OEux&#Dp?b@r2=6IFw<{ z(m5~p1-6Su$acR0fJ!kB86k*ZXz8H9ssz5UguVrcGfdX8M*x`C9u9EmeV9Z7MOLtM zLA8rk+5ZkCDua(QTp%?_IhG5>dHKFPx6A63iC0Q|4TZKs57ZrY%(Hiu$g8dYXb8r= zcdCO+3u?57HL$hcI^1>e{O>w+VjvK>J>?)Ql*)mDk4aPEEy0WYJk9@WDWLKG?^>c4 z>uM*~=;afaTOI-^@<%36ix@kWB5)T~;DOC72?o%y1icMMO9^lc$=0B~@#WI#RsFHg z<0Ko$3D9*V)dM0QDIJ{WBy$k2`==yG&0I0m?uL)NaSrDgRV#<~uWn4_KXj0V$< z;Fb)K;wmCT(ZQa+@kC z;vCdAQ-&{^L3fVJd10x#$o|;bDi<&}5<(P=iT_5loD^O<3WfIR9X6MGe48Z~+MHwvK&KO8}F=JUpQizJ!pL|DYP7-n>x7k$sKv zd=PL1%;UoG;!bT-UB-@Ja9>lcz8nz+<@&QEc=!qlXw@)@sv~G;qiNUH3#*Wxq636a zc&!mMVf_w0x7JPdntdty_*~fm!K#*;^)L6#qIe%)DvQ{1vx2@Wj(U|6v^hbQiuL7U zOIMSYA?)9!#Cd|rD(GTMd3W(OPkHFGNeuy`67ZP7`_1Xt3=~vo(o-5beS5z3QTq=0 zt2k1UCEh>pOb->z-9+a|>E8Y0(94heygWg&JeBju41z_~A2=w^cm+N`3@HBFjpELk zq?;KgEfkNITzK1e{l3=sw~rJ$^w=q_QUd#|yOAu&Gb;+j-{PEC-#QsmgCR@PV6P`+omk-!j^RxIf+E zgnErR@Lkj5$_{?-=DMqIJJWC$>4e{nTqZGZV;1S2%ry_^+9{TMi?QSg*Ch#;K#(eh z1>NOXN#cKW9tXK*uj1P38O`NMAX&gd(vD~2;WYH}NC1Z2V>bhwiX;G|x1ri|egeyV3PQNRpyvP@Mdx#BKC$Vi>B=3NaF+ zzml#aIe?lw-jiShpH4vgU72o>d3fbSPgR9V*KC0NkZQ>7xp$Mjzm=xSSoJSHy~l1} zWvpqJ+gVxa-?{s$)6~|yXPO5$@JLsLo?NNP$u1djNowW+SaEna-_Km6ecPH%(G31g zY=ms?biXpbY zs(`|hl|LH;vG2=)&>|Ys&(ufC2&@zv&L~2Tx#x6OJuA3w=`p!bIRAF7XSaR%`I`Ec z3jHms9Hu_klKeLrxSoEpIi%d9HQPHU+sMLWuTLfWPRR9Hl*=08=Ve6&WUN>D|9~C+ z(GSPiQ+r1SFW#Y*p+Dj$Zv_&01W9qcLLy~(A0U_Ekw5Kg*c^!egMO-bso)IeUvyjRHs zWp8D_jh7NteDOIOjZ!#2>*sh{4`fC#Oxaq}uYN@(nI+^Zm_}2H5(hE2lvgViPtK~m zXbIIo;oxpKxQt!fnlGsgz9jZx#9Qm>D$DXB${B^Zj_ibgu= zC;l9nIm>zX#I_8=&)iZ-4fb02?RjIyvqp?LH(@hCe_&#;#+b?NVqQMWCi&|GG^_Zw zzR24+{cXm5mYI}dfOEW=QdKhL`hfU(t0d0F{JnGPuWH3NMft=E5D_P?R#>pM0y1Cf zRT|XhKmYKyeD&mJT=tcDynDIC?Bpz&0MkkrVe6kEKbUQPpG+~#P{Jp)ut4oyj ze0f+=J~U?4q+9ijd42{=jyI(aagsPDcJ5SmX*GL%q1M&?E!Wh^e(Ld8gDGvRiUuLy z4+%|qx-Xuze)%NtG|M>7y1YD0xCGz-dz{6M2mFuA4^?Ch%XA-(2yhTrGhV zPSBFS2^g^g$(S_ne=pJ?B1bm<@MSP7=c5tvtXD|UFd|Q(#Zh^*xMB3(9=0*o(&w%D zSU{!Xb|d|bxS^&kp~X$8ezkooF%^qmp)!{}U$3xC^c)F(i4Edx8_1a5yvEgQUT!g? zyV!K$Kp1_^@b(wKQ;q6A41MU)|Gt~CDoB5iu1cKJ+kO&}ABucsa;li~s9@zG$64{Z zE{>+e$?OWe2i%+Xaf)GnG80UUY}~tMd&H1&B{j&+As*Zj?T>W`K&B81HczJ?PfUuv z);yMs2Y%MsCIWMhAk&HaMqe=FuuVf4K8nzu||)!GGl7k3AZ6 zpn{Ji*KA2>zn5(rm2UJXm zDn3DUhEMrL>@h8@#O@pQ(hIN;()%@D)70zlqz5-y>l7T~TvNLO+WSr**O;|#hFnD%eluOHjJ~JFjb{gk@tZN@-V^mfTUIU3Klrse*WWgD zEsi7kel*Va^hb-CjE}!=xQQ_g3O?O;@L;+DgtR1asDkzo02=>##EHOkpT5@`?d~*3 zl~KKx1M=SD8;(5aFb3(|4VNu`$#3%&65CyPDF@lsXw&5wg}iW`*j$Ff;>-5riBk(d z6Ek}5*))>#OfERuPlYE;_9hIJm>p>vZySvtZJ+lT3G#?xUG2W1v3S?Y)WiNQ$;G|& z$L&+=1Ke(2tt!cWRyE2$2+y!{P=L8aCm^mLR4xHs0UZcWI4Wr}B| zn1$&S=PXX@$$N^MtLop}X`_;2em%EWN5&P5+1A1r_6B|(`>KJ9I){sr7e1$k|7g&n zvVSnu^=(&{Yt>N8%G9^ldhV7#i~JhIYaY1a?RbYo^n9h{lweEC(EGTTMeSq#6AWor_WQdymip$i@p zb3E@vB~njF%iXeRoYl@}1?c<%%3gfg;@7NCWbBqiRe4=~zZ+-_!P3hQBZS#@-H!vW z9c*JPJ~Y2wtm5+_=ZKg;TJGn~M^U`wZna zKtMhhIy9oFz#nF)8>1esePGx;CxpHu}JfrDF zjq8@69+@Mn8sVvy$3-8Mn!WWB&b{Z=n#aTV?N?l>SNXfv^mMz&sqFm^NM+u&YpY1! zFD*^yaZ>&DV9+lvL>#|1c7L7~;!V-C!aX*)4ggTw30KEa_rggZjhu#YLUB*4x`)?-fxUYW%x%DS3QFYvU&^wd7L|B92pI(_FJ z0dD);v$Vltwgbg|e2X;PO~LTmyXJRbBy0){t}iN1ZNYe50N}~TI7)pZqqEq1%V;bN z*(*KKWSiX=;`g;RU}E>|&_ozry$a>?R?BhO8R~X(uPro9_ocqM-0dwQbDf2gr*X3q@ES-l2Y%rrV@KQpv|(irZJE-ZxSYxLeln zg@s>RcxZt@!9Xg3{f$TN5B+RRFYaQyc5jnv+_c8jdB9}+=?1;YuIV+(T?=2gS?s?O zymQreSrgVD_1H{63)e2I4}za?aB{Rp+o!?}2L&>VfOD!(;5_SsMw4!ut}!4zm@h8d z=d<9LG5tNc5tE&Af6@5Ymj>@f&n>~{kDV?*u<-S{;r7j;-eZ}W@;7QP*(K;7AEG>0+I|o6}_q9;F{;t5L=bP!(&>U!T7J23W7=r7f+uQP24R7?k)qR z>#GbV-xBXIVXvger>tm_m_`{?%{TF~Q|~Q~(D=_unyAw}&D;Kgd(d>{ zJtn05?AJd0hNQu^QR>Gv?grofNzl3N7cicdpx53^dNHdy@vT6?wXJhYBX3LSc}Izb zkneHuJ}2b*%Jvmi(7n|o{<0OK=|RS)4cf!Nx;UzzDMkg=9E zBbijOxBw|xXP$@0AZv1F_VD>Pb)=5Q=`j@#%-kj9Unbn=07-X`bM_k(AW-pLK0g!8 z-V18S3B#)PxNA!7qg{(Fh#E`13bE&tzHgH@2UKH8Ex{A1#oZ5X*sO-m>p{mpeth|} z#AO!OjDlHR4&oDU(?9KkBs+@%5hLxA4*K~^eabzb)*bBMXBhJ1G~;w?e4r&_H>Ycc z@zuXRFr)k3@*r4#&%X&!umC|SytwrgzHGAn$ACi8DjV3Z{hK@y!&12HpR`i%wBh|!hT#*QY4F0&jTNQe z+DjWZHkj^qA}x|x6RZx`Zy|2+*`o;ruNQ+pWRk~fX!)NL{9juj2_$y(ZT+v12@Z~N z24|pnAuG;qEW67YX{bt^Y5oi>9axEa`+0uQ+UP=M*PV$VET)fDk{pz0dj8X;i5knH z#?i(3_l=zxoczTz%cXN*Mpjq|M-GS7yf5 zS(6NYBz-`dR8A_D7wcyE)>z|%gsgZghf__1iu0vQrm=00CWI#1$Jg}n3g(!3D=yA{ zxSQBrrDCMoa<}5g&rhBTO3R{W=n6=@?hv@?>-lQ(LhLz~1sHY1&vaXe*EOtfOtkh- zr%T~aHvX3m8o6Va%v40u^$*g6_dxMH+Y8HP5Y`qULpOOzBOeJ5(c~fscL^sLSvBB5S&-Q zwOH1d$iAkbRQCDu`Oj_>GkZLnwmXG*da-BM`u2+2CWgA*x9?o48Ai+*hER;m>dhA( zs1qhohdigteMU71wM8kRFJC+vF`oT46w3bcn%B60ORm0W=&!o2`L5xCZ?`kzue(d1 z8qzD)m-kZMQrS)hrII9y|DR9%kC^@|EyiGP(CwT8NBgQRy+z+njz~^?v^1?HacpxP zFHjLq?iS_0l&y*{l)D?GeXLnAlC#q&;O-4_ep6Kmw8rRpOJmk{&S>W>@Ab#~25^)4 z0}I>+lgJQ{?-zWli|D5sA_GYo!yT9eLpN{t*F7({FU8cn*mC-gxLo$|MWC)6Sz)MlZsH#vn`ARaiJbk(EFkYfuq{Jhh`^sOBmkN~ZdEl*}TN0sBr5SZr zg;m+pdrS;UYM-$f(ya3mxVhK!*2~ek%fgFkt%+%)SoOtZKF`Qf!cK+p~aohV9u2iVj zk{y_4*uelsA{v7Jowp6PtG%|?=-Nn8qY;Wk zGQ2}4J}MRx)2OK&_#|FiKdWI6m{x1p+RCK&_fVr>ewJR_PP*qPK2u!Tx+^y~E0i+t z;dAnC3*x{cT=DzXKNy$*fWcZ!K>L5&C~%xY&nv_7#O6-6X$%!XfQ8}T$GE4~B{IAY zv(Jwf@T4AdZNA;Y3_~^TBS1BUN%$8EcvD@#=4u9@ao$gK@ka*TmGP4H(23%4E3-xi zoWFyi@DJb8ec4icF}mYZOPb^`cIT_te7VPrllEnJMC~R&0cy@8r${A1lg0rrP5XJv1Qpp+KnK!Uie=VeoiTr$|hD`RqR-`_9nwy?I_^RT2CO0JLE94^L4c49FsAraonNZ z=H9#ZjsPCV#3VWe=CkUbNEvu}t;0C+d`7!anq2U1um+7pvZo@Pc=U6Xe;vj zE}6@CRYFp@<%ESp&BhiHsw=X4$X4to8H~ZK`}^~0e@p^fux(89%j z$iCZ#_!8-vFjh5c6p*~T>@&D|)?RQ$uDL66tWtZk{M~mp7dONx8?RJi-`x0+6yqoN z{SDqvZqZ3+rvmd>A+&|1+~&hem}K`8+#j5mEgDDN_iZ;d1)g2r?uY7d>L#Q}F9>l*2o!!Q4siqTES)4`ic1QwGy{KL*1&C&~v=+Ayauc2i2 zq(W%dHh;dB75G_4wke!oe>?HJ>YT~ZOts3>iL+1MsVAr210U$mj`6u}^9fjgsZtKF ze5bUbn*-JRMM@pY4ZP*S>UBR1L{HWac`K?T6dJ`B<$7H2=7hJR z#JoTsM;VHuTD3>!o_V@KvhF+m(gzrpE!Rn?n)gB8Xr<1E$0)7z`bxH=(23nh8(l}D z4{H*!i@TJIaiUF{=NfiC$YYY?ZowjNMSRUk=FxtO8>{I`!Dpl!riWI8Hc^LbKM|se zX-1eCD|&Wlm(wo#ZV|^+tJ})gE+qD!$pWjZ;T;PNGCGK(t`6_7i=h1>QbO`Dc4#X` zP|C{CCp<~iyl6?rvSUN-c>l1fpLEZdMghlg@{;Ax2Va%?Uy}d7Xb7o&+0tfk-U>7- zqr`t=0!`UiXsbW}+-LJQs~&vkJyCJRrCfyu*5m*r+_4~mM?1eo0Ay^8Cv6S)r8ElC^>sv)QZ0(mUJZ*x2a|6Ei6`W$Clv@Vkaj_ zk_1pnX`UcYQjcLpM+0_qLEy?UUhx;D!GwY0V8%2{!^CtXsQqKwl<`clzs#5cR$au$ zopmF}WaLtfx~6kJ_2?wwKts;Vi2`_Hwf#1t{G|M;uDw@63#do!oHT1@lbouodC@lE9 zw3V@T{^HX~86tU{G*xg#t)-QQiQL%6(-_%xl%OX;d=r>&gsyhu0vtG8SANWyA>9m! zVDw@2Lu+wQPpCYEmC`D*syupe#Bjflt{DDAEt~E)JN(qL#{u3TXr>1orL(P#Wi{gCCntrwThHxq%>=~i+KugUeRWOv1KOG#JC(xjzJ%MePI#}A6AKj_miStru+W3p?Aj}@1g3UkJ%64 z|5Go^72p1sS&4och`1`4%DUT|QNeUw=M`r3`fJ1*Vb-b{WoH+;?&TM;6CkaPod@Z= zYpBROK0Yqfz?x1{65Va_Gygfr&bAMS-nc%C$xuPN4q5vA@vqx7_$6YP4_%_pt7joQ zEXF+v5!P`{@=| zai+A~p&EV5){qTcD4gYNQ$jMmU}cYixLsP3`-$KDuNn2zTGNU;beUrA7DGcWI+y{t z{_jNKpStshln3Wie<3@_scCDL&qK?<^Q1-m{y~Q3G;In*e`!uv7s-qsKf*+HU(Ub>4ydmG6^-n0Kn+0(uwEf1e80;9E#D@i>iL=^GQ)$RP)Nq8nYz z@xF6_#j7{la;hUZ=d82*=~!mN@lJ^Sq9?R{sl}kY`)8e$4zqyeJ7U<}dDu5m&~yy+ zVlBTmECQYo1kt-@U9lF6WXj)ZPlK9DGutB2g&=Nue%x5e=Boqt7&(i+z zcp#P9aoFyt%i(*@&aZuXZGkrc{J=2U8lPNXH|e<>woYn81l2E1Zah|V@PVebIgJ^8 z)?Zv_j`kKF!tjtIV;r9!LAyrfejRX3<*0kmQBT)wAITBTw^M9Isa#U zL5<4!gnAibW?+N_W}0d$u!ya-T6H#$TH#l7P(b1q)Vw{U&MID(932f~JA}|@ruf4h zjZ)`5mYpG`^rTj)4#_pLC=oV|^&P-aaAIRTZFul1hi~?DC@eXrL1s!7o3X&Ca+p$&nG^Nf&)gq}Zp=wE!$>#|Mwq%{~my`~Z!>%>fRxSfa zW5tTczmxmFKb7D7WL{L{R{y$+L4a&!Rqs$){C~9?{2ieoBTUEsOej94@X8RYj4-A+ z#vw-uhnER9Ju(TEvcznFcmRTi)Wuz1@oZ=!L}G1hB{0~K9FO}^;E1!wOU`#=JUq_I zCu`1@66S-ZR!CZmJm-RC*iP^h&Oa|5&{X@h%uvq1ptLe#(}z!-G%K{a4g8!R9+sEE zQcKUA+c^L`E(z?JwL|5Gh?spB&hn5{Cn+;VNUBAnTKw?K5Xg9(K?Xq~fws7k`s8}? zRKGcTuhMiunPh(5*`R^#`|9(`F2UdQHYHuu)trkjOav~&TjN8;3?K)XZbPyto%{Q8l>qDf|K%`OiYj-I3zy@ zp92MyiG#qcLl?}qpSPK2KaSmu27TnxK(b)P)J?F2;57V?emfl0T;Q0?)X*c}b=Kvw zClj-TtcAi`z?Mh0&pj!=_?{B+SSv8JC*7YREqS}>9Vr!_A&PNqpqAio-KX=hK zK>yZ{RIv1-&a%d|Wi=G%t0@=A)33{N5>*%my4h=2c7+8+4c2bPz;a3D#TF}nD3T;( z-UYMge`xtGCagS)94_&00xDc#b}&V+$(^#hvhPrvb&_HdITWnB;<1j-#P^cs3@%D~ zknR*cCc7|n19gh>s&LFK{C)x6WN8PXeYUcsgQcwtcJlYFgBB)WCB~?eOFd3w^w+w^ zx_&C;4X!kYS3YYU;WXN5_DA3=eZ}zLf4(p+t-EBC> zf*PF`WttZEI~7}T_k`%iwrU>t)5_P)pi}nr*Y=cW*m0BAJr+~pAv9}FUPQVRjVF$@ zD1vA}Zf9AxffvP2b$10Swj4QRiDBz}+OYPW9I4$}mU5+jNO}xExzilBK=xHaTvtgM z$#aPg!#}sOWOXozN?=t46GM%O>gPf7VibSLQZT{SX@rRevCTTJZ{`;bnt-WUYc;y3 z`|X#^$$cVFBhKmO;2F}?@2lU!?W^r!dK)V~8(zQO8df-@LI_{uAKK(bzli{uoP2=8 zk`o%VBM~N<*Orr6{6*{{5P3m%aXmE{b+zwkBsi5k2>>@}Vz41ua$~TY?nNT#Y6+~W zacE}#+jq-E;))H^ZO3Bk0E>TS%KvioU7+TPup*$K=RbCdp4h~$^k9tNdL@I+?3eZ` z+HDQQVYAyi!`UZbs@2|D9Ox%vg^*uSPm}I3qAOY z+v=zAQ{Qd75F%8*TV17kiaULZVZX)w19D3BlwA+BR+mJo(t9aG4R*_I#|ds){nVUw zYZ;@O#;69JON{4{ZZAML-7`usHzFeuach(E))5&K32AphG2VXq;(6;U*~%f15z%18 zTbFMJ8OuS#SQXtWb+7NB3*Xr3DeDFXJctXLmRjtC)&Rt?FNNSMt$ZrAO9+tVkFYgz z>R>I=u$EYqzVP|oJBBY= zyVoCiKhM98VP#x3EX4S1NT95fm*hvp`%6VqP!5tu?q}bX-D6gF#+76z}s_UOYEf~SS^cqqR?YxU2aXn@6Lsz>wb3Y&-=@cHCoSf9HXAI!H0A4vj z3SiE`x!f+J*pEcMUaC0!jV9?n4&wEdIr_fsdV8-#~)%}b9`bhyIG8RDBEqo zW#sk4Xx($(*i z4m{F=I^-za+iJ^)x_&5(hTqZFhPjFVmIr2O+8$PpM9e zW)&viT&8N_^DK92HyU-FrOxisedxD`ET8GnWyw!$Ws2h)cKJH1NSy z;dtNN6M(A$T9kStv8M|#B9v|GLLRk-=!@3Z7V8EO$ZHEh%e>6E_#-{-!TkG0%da8K zX?4dpn+ngNE}qY$L1qW**=qZ&zV;)Dh$B`l^5p=diW6&^K&rT|NOIHc%36e z{e>cp=Y$AD26aCtyqH#ssVWWf(5L!a{@ggD!d701UP`(M6g1lFs>ny4`dVt!)C_dp zi}VHXyy>1px-O>SR(f%IE(`Xp7qZDTw>yL+HuIG`egqMj6v$yz6kd!@>tzlIdES=C z|FCOA`vf(?S`|3skI%Pg6-SGdS+6K~pOm6|nsSYEAiP4vsAXDsE5xNap4v!TLZ{uJ zBVW1R`0-JuSUJwRvBPtY8a~>pyCqMZ6*;*#55kn zPJea>Vc8b0fP2QtFYFv@(}?8%XYm?$iddYDZ>9PSCR&+D+!(&$xXkw92@?mPf8?<# ztMQvkh^Z5^u`<7j`?5Z`Ux#K+ws((NIa~ zdp*M{EXhB41N^@?rAaaOFB+tOehsM^ehu-BynZ2oDwXA-pu|^ECgf~eOEEttpISe! zv)k+nxXdnq#bB)O{Wh7CfWE~RG*blR&RgqQp!c+tBr7~rj?=>t>B?S2FK@yo#w zX6ufoUpNnlN!(~(0cCKz?d#@0sQ#z>Drl5zQ44Xf%sIAnosbb{^upxyqyRir z9k^W3u-Omld;cswxS2%n58^L1Pm;p=)(C;H0g4^L$q~By{>498g$P!8@$R}1JXBGu zvTNLE++*vy_K&ADHlJ5yko9Y` zqK|jTsNq?Ov+Oi}q};yN zld%B}>7ma&QZcgX*(2ja`e_1l)~Z4d#8N`I7yZ{t)-qhIDWyYrw6Gr@hNWme{4QjW z%iJ^;7iUO9|G2ijrE4bgH=Y>vk+%HXoPT$1;~*t0^LSYH-dS?$rq;7sFmpp~wNn`O zGC+H3;NvKGz0PBKi89UaQH&k=G)V2F1IjaryC15zqj)OsDlBp^ex*C&gNbT}21_x@`C55b zSEon*f*_X9i2Ox0ubG--@htby{%Im`lR+*a(4XoqFlpHnVr2uF9yBO+HfH(Avj6*Q z>rr~x+65QJ!pz>71+9VER^#n0x+Ado$3`Qf{L8iFmpoD98&w{a`lbRuU!n;4_itMM z^CHceJ;AIPHxdA0zyk4)Y!XQfVK$Tv4UTGxAD9spWFDvmGfLM z8*3bChgc+oUwlp~Jh`bLe>7$16SY-fCFyugnU-3q?@b>z*WU}FZRv=P$>dspCg~ly zqBpO4Id=SRZf==Z(fr*mgla$lM)x*1Q(?}WlvSqFKzAD+DXhXeG@=6 z7=$?c>>^MyHs;LPeA9US!ANe!1YcU)1)Fo4ARZVU7nGPi2bbS{GN6fWGNuz7i-Voj zH4bs5Y-LrrB}tmiBiAkkP4ngy-okIp&aLp7cR90&`S3kry3+TR0<`4Vvzr>|5#zR` z9%HQQ>y4>kUWN9yL6)S~c6+XLCtQ9Cf)FvY=1qBSD;n5GWUir5qulNKp+Iuj{O1Q2 z!UZ=?+s6~BV4^p)a|Y!d3GehP@bJvfb_WFl6tY4c<8>>zTle7Kn(-RqS-fH80mnWF zo~(9jC&Wdb{gTDPlh4&yQ^r3PpRm)NxH2wjkS#8}P!rBNr>6;2MQjMbMQpQEt>f9M z3%f7pemFb}w$#W5&JO8u3kk-Hdvs?{yU{qVH5rcx)FeRdKtp z%>d#iJ|+D~`ny*1F0x|qh@GTazh8Vel1%Mr?PdKQH6Yeb7fwI=`JTRXj)*wAzIE3w zt#|M`*Pdr7nfC?Y{6B?<0McA2!B;#yVE-FA(=Jzt;artH1Vlr~J(c9wY#Y`(_M$f* z+L1a$OuG+r$5`_^1hND|9wT&(@)(3YdYXGixLSVacAdHPZPV-yZvYt^_$>|Zy+Dnn zstSdSRIB2?`57jgL3~V^>#)eSawkB)dBemG(g-aweH15+Y!aw#Chuac@d1mKN3>Qm zuGFbfkhBcCE~^~G>Y=5(PEE;d?8KYVV-K4eZwUYG?tW!M3s@&zw{Z~o140O!fa`)n zE&==k8z3;51aAsbP~upRy6~Kc>9fRMFr%hkQ;<5OfLbt<+2uVj==_~gSThjfBBDy= zoR^w1dK>9%31=>89oN&h{Y8rLwl=lb1{eKO3h{AMg12{bz|;#&k8oOL2h^+=^k6@6Th~%^$>$`*a#y z8?h9z<;cXF#gol|z)!*6`;*B%JlEsM9!B9M{XI^UPYqfPsKnCSiD2h0^MZ4nvz;>0 zMJF3y9rI2#H%=Xk>l_QLj*jMYJFi?^#Gqt(_aajxXjniYSN?=jouNX`seyAjXF}C$ z5T~-A_-N}w6vb?dA0hsri&z$TXOy!rluBKDzNC^CP$HxXOn}0ZjqNpNIBtZkJ%y4hM zsi^MiO$Io%Bo(v)ZG0leb~{^Cv1l_f3qf7gb#&v9d^ZNvEF6@4AweAQa(rWE686DB z6W(3fe#%}f*S#9yvv}m8@MTBJ_)BJ%7=D2zX47yrzNr5ys_*C(bnY6OUCQ8C_VR|0 zW8=XlJ@x+zJQ$kq)DxBzKeZ8TwgP^G=@|e&@_A$sRjNuwffXe)KS@}8GL`ask!D+B zZi(^dvi{@Ij_rk`xWOsqv=VJ?WVS_oyl;94aj6s6Cb_UpjxmM!=YTl6{b_j!wGI`-0oX-1-cG3(tadu!zpt<-nN!UEH=_dQnIoYz6_ z!2>hVUlKCYKEViPYM8l1J@m`2#|@KqcEyHrdeqB~kG=P35FND>2AF*Qj*l?rj&0{9 z(?S;Kya^?ms(}wrXsTwRWGLTBHy{sb`zzZ$P2WMMQL8*%*>|7o$prqBW?+7@@9m<- zOZANYSQ7X>jxPuLj|0>ZwFFf5Ve|qF^YLOYrGEOE?x;So!Cz#;bZ(FuHhIi&cMdVY zKSlNqv0X{?g%ZAW3&ELhO{!DmZ}&rTa7*8ls$MX!C1qiA-{0<2BXAkmQBAqa^ImsM z-B1!*IK)2@fOO4{hZ#uHT#Y+c{biOgNZ~U!-?CwYmBz(t%e&~@TQY4IK2SML>PAWk zW;iV}lE6b3QYxLP?B`r`>rSrHgt5C6BP~2>$^TFA{>`oEz@e~`EtPZuql{h0mI?tx z1W->3GXGOxB>YXc|AH(k;vLTBu(1GE-3Ap1@$mS)dY;G41sHBze z0uG@z0LN9<18t0GE^{lOR7k(hFmVGTTGIs&Mw~Y)DSvIc!X5QkI$76anit1iEWFHEXUEl8!x*A zG>!XaV~nqlg{4gr6)f=6r@X@7_cMlm#H0O52P>T~+Fl>-M&4JQyJN=loZF9exq_vm z$b?iUlD$Lb#k|BOb%D`1+yS~=GH*^YPiwStEqc@Z?)=X)_#Nj+M!5XlMl&%Rr(KMq z>(p1kH8^`9y)j-!C~9mZlheVfC6Z4GCRsD=rF|30gQuQ%vAyFwBuq8QSVEy_oMHEJ zw3yhOmk(+2&CKp*Ba}=r$A-CupN3Onfme!ca8gx_|em>Ht=4n+5D$z zzT2&$1!SeAi^PyCqU@FhCEm9dvg16a3%@+G0igYMRPZhb2`^kW1Q;J+A)>0CJ->Kwmr9*>hs;dN)RoyyKC<#AWPmam0V zmn-(BB%ePh6^(>!7Uo$mhg!z>rc~2K>SJ95J=Axb9ZJtx9j&@W0o|WBUx`@{*2Rch z^{*R~x7<9d_k3YV-rNkZmQ)|OPX2gSC|+9Ca!?YDm!Ot>gSdO-f9mT%^7%KKHChCp zE^v^R;l<+vu!_p;aRmN;3^XGp(o9u51nkV5S8pC4h^f=*Ganz62`E$({~@Lbgb<;t z0-J{o2@@(HuRkLQLUF0|b%B3dyUK=u^Z&02n5Zm<83A~OU12b94y@9 zeVmtvYviXtC0-s&(zJS#D(CH!yH5>cjML4V13m+6BR4m&hRCMwL1}lpggme+Nm8?> z9;Ntbj;4NftDWCjo0)NUL(UJo4offUynOUZEL+=6eiz`?&HIlD3E=$INUM(yWg%+s zDc!j#AVGS&arlAZ$t?np{EW~>gGrtUwaf{($zw4|qLO#Eh>gD2Cg}{QB}p)qI^Z@P z&5z_5nfYg;PpfCE5#AHJE(-yzQQER~gsT~a&>`Dv+b)nvuX^1h+zZ(XXQFmpd|KBt zka*fT_-$rxC*~>tC4S6sh)x{zp@9qBdE8h=-^sGmc9SkR zW8~advkJFlMq%)FPC)5CElpH+4wne?l_aU~^Kb?S%wCG!i|weu-{uPMvHgOuBxCJS z>LOjXxZL7HBUzmEkl2o!!~i;>@#&;eiG>NHqy5#@Ysr(NJlC@$wC-98Oy2BO24&x; zZ|n@OYvJ1pnjE(LnzwdZCDGlAQ>_u(Yn*#9Vq8aExn@jlLR z*qNgy<~8IBCg7lYzhms9BRQPwfVpy@&e-a8!8>E6=w1B;c3om_;OHl%pa8B7aV0Je z#?TON*H*%4V?=*SR|N)-7MvTS=)6lOO%;zj0Y&{^VusT*2TwG5cgx4D?>tD*@m^kg z-UP-2V~{k3&uDoMcl4bQl($Jt#e-`FibAYn#>01U=A}<3(XR);*!_f2H;dZ(b>cK_ zUT#bIPW~P@b_xZatT!MBMI4lJEsu9T>ez-NXtMTTcOv^MQlw#$*Z)oaoFEzCeZfTa z4L`|CX4G|YA{|4t!lS>q2kff;Bj8>mLMTu_DoN+y_wH0Cr&VP7LtjMtkJZ6#NOkCN zLq2q_=-**@T9bV~)-|?nqxNWEbj%6tf{qYi`uDf!b z`V})$WM9sxRo>ObRiZm9XCFxRj+6Cmop;J!?rzu|r{DD)80{FIX->U$FZIr2htu_a zyuG)Y?azfo{&~OFImm@aXX3*A6Tu~_Nx4nH(2OMO#kc|ZfcN)i<&anxuBS23H=#4A zMhWof|DV_R!>fS|@jqRnL;_Zim<8aFvg@b6QIQ`>h4H>CZe)Kc*eL?g5x@Kn80szV?_3O5c*e&h~m8E|&6O}u3u@B5wQMP3|7 zmRPLSD`q>8-K`RJZtdOHHMsDCN;n8A3@fNMQ7s&|Ei$g+vF&6-0O}%vfWV0B93vqA zPREwVE0Wb~K>GUrMuGdr$?&j8UDh!6ERo%7-a=*%Q(AWLgNC1fL@7;q<`*ybTFkq_ zTBb*ZuYM_y4>t#MU^`|#_o~cDb!2g2Un%WIh7*KSTiyl1PJY<5Cj#O>`{9dV5@{;VIxm+gZy zDOy7iSzZp>5BeEQ`dnbk6&%-i8=$iCzJmo*H7hIKy@uW#J6`P%IJR&Nz2+`t4|4#` z=~09SuI6k9tJn)3r+S>r0mPF%%B43S3c+z}!mn0&Z!MQ@guGYB4SzKYxvtRl1%&Ez z+9o6aJoq10>Q4i61sQa}f()`dmZ5@qyot9NBq~TqvenHhG{!0CVu`;^ zo=yp5C#0XHXlhM~0tc0JGS-6{UV3?4!NnT_PXE@Vfk&9W^l;s(L48Fneq*$nNdPAK zSpZ_|9O~2kkJghphPw@G=)TYd_viT52Jz`blQxCf`{w(*XPhr>&=!~M*ur*;xs`xV z_21?-mrPX(7j28N`x?0+hS6=B9whlS%} zD{g#>@x?r@2~Hb_nz1Swto%DA_%pY99s(h;W`5m{l*pX+FTYex1P)jUwF&^+zXbX} z-?D(k2Q91``5r22+4?J6azWJ}-W$OIGJ29#>eVj`SuAbdK&rMy2GexbFG>LnX zM*-*C(^!!9E=H?r)ErA5<*0KGe~nGQt|KcrJ2QWC-ENF>*z@J!nV0Q3I++J^;g6Xw z)YZkA6`txIxgV8CNShakRVa)V`wnV$ ztoy72EY7l|f&m9N#BY)( zP#6<)0d75xYPTApRB0uHg042`-ZwjjLze6AfcLSqF$?gS1H3FFGtnNx=cGqZsXsZZ zvOPUye}u=W871iMU1_AbWj7c@0cU2X?~c$M!$&zDh;|IANRNsRdwd&iz>7Qw($HQz z9*)2vMJ=v3cX!OJFj*i{qHe`KcA1#d+ z*^>z5c}SR6PG*VwXi>MbbsgHN+|7YJsBV4=!r-;dzg^!6G3a_A3$s5ZBW?uIU=O{1Bc^-J7%j7 z`E{S)4`My&>6Dt(mbqUKK<_j{&zlrfD`;479xkU`F`uJ)1Ws$blx=_QAsgbUpKi($FPH==Rr1*^Mb#2CJCI6 z7@oxRPxyH+eg@-jP9ev*f#*YO1%FyXW)9y0i69WyYl5pHT}l@-Mmrav+w6V`QK7zU zc=VuiDCQdCx9}nQ5>w5ub}DD~B!Uou2F_8l+vzw%mS;k&YT_=Wt1D5T!!f@Bs z-jues+sqX|;gAxZX#(}R5yZN?OrGAGZDpLvC1P$PEakVZ(q>$j1kyBY^-vnWv~wtc z(BXl*=zJb4Sj6bsHinR9RD^Mq1cuVK4p#`~?CgPV=beJjZp^5sZwm5>^7Er~#_p;j zf)N+g8VVl2`3tV5?`M#isJcpeh*Csfcy5PuoStCBmc}$EBSAMpPN6GujU&g;)>HfcoZu{UHD&G z^!o~u3RQTAJr_up?UKZ&2a=Rn=6z2XNd8>vfXx$hOJF%DvQC& zpuR^u8c;t?O6y(P?`YZ=H#ZeZF8>vIU5iX}Ba>a+zTvX>ah%i=u)CK+31>s&-(N!g zbbkvLJyP5zaF#>o04Re~&CFUkM^)dA-<=88)~mV}L-C2FJW%^qcxDqo z$lUw!r@9cAZ?nTiWH9Hs1EnI&oe5>g>4zi=e* zk@8-N1^@Aa)X3mS>xYd>5;@b+*>20)>8r4ncOs!zQMVj@Jx0IzT(qB@R)M+GWDM}# zo4uI$B!w=OAGa|XlD=J7xI+!oz>>l^#_=jgcpVSCI*k7{BKK-}n*R&0_pV0>P5d?U(A0#^>=DodGV_m zSU&Q-UCdvgZrq*~Tv+cd9+&By=rly2HCQ~(50?illrWYef4jTNhzLur8-v`>60=eC zu88^2F|NgC{n-8m(lu2y#df6YLD|wTJz@i?RNy{6o%ihd=Ir!u-}<``+Y(G5Zz?!< zBXqI1KkC?6ILWtpJ2ZbaqP~CfX>}!iN?TXRIeqKhw>ztheTOC+k$be;2XXr=<5QT` zD=mQFFV~yss~#*@my`o{-S*kl)g9IczWWG}qBJj$J?s6r9xGvgC!&oeYYsNtHtRu@|719DID7Bn-c_RZGEb|`vvY)rEl5Lv<@ulXOTMz6A>$iQ zrs*8Cq_qP=Y&f%faH#;u{am>>5Si{-pTm8iK3?Q5eupdg5^o^8*D;Uxn-bm|KK#;T zO_#Xi`$(e3Gd%F8JQiKBdyzHH1;)CX!T4*nyWJA^ejr*6(zlIL4DC|C8wyMa)!MK0 zB9YCrj12`yPeH~;#u1ONN~eC=>TIli(M^-CZY~!{d3mEXEhf445$H!B06I)(;x^CI@7NllIfbt53^5SyF?bkrHgDVL_ z(K&Kxr$jEMMe7WCo*;BLtO`mR<1c`d0M+_{)DvI3W%-JxqX= zAHSnwSsaYn@$WSo4>pMNi45GR!A#qR9L!i+V_-mPKiVnf7jsm#Zyu5=a0R!64%mTW zg|9HTEtLIw2KmL)J*L@s`)IGNJDaq0_N2WRyiUj;azKTeJ^9+eD0qGyJgm4xY?sQ8 zDq4C4wx6S2hS`9@OD|;ky8Un@FfJ=##QwBVYo^uhh0NR)L{6)KB<^yev=@(~Y+?)S z%6#~|pe~Lbs~(P8&l>cJdOlj%q;V(cM*LczNuDus4)9hKd`#dd% zpuuU7U{PKBeHVvUIl|f9jyui!**s#$&!=Z6XBj5mo_7*RwCZ+cvwkta5$`6OQoY-4lGjNJAIJruz@ zkNpzSBG{AHlJ=ddydw}X7+dPe)@guF$tfOD2^y>h~JVbTl(PX4r ztUU!WO#2+n;(naEMKja_5LTt(1dlyasVA{QGN9Ubvq0-p1ekv3O7w+Q*G|jJZepb% z-Pv>Qe@N4RG}n$j#8{_5!X!Aq8w;*SYh`UA1mKtGoDke6MA|Gy5fcW*# zZ0(kR`krw8(1ijB(DG1?xP7zSIOb#SqfXL%BlpM~l%R!UeKx8oBQtnB0dnClnJaic zpBYshF0D7NOHpy&7Bb~9&pu=xPh763~inEvBOKaP7yQ>@8r)yKR2ZFdFbGWuLJpPN+VXWxqB%In})R zBzy&51s%q@6c(M#=^Ik1IpDh%FW9Ms+iGadtVN{8z0?p8^XVUjD~&4TDI$`lo=iSh z`=vM<7XK2{zkFM1RHj#NsZ3J!TmzzL~2LhY(8{%1hiQ2UO)Ay(F#0lwT&Z_Wxx}S}c+#aCKR;t0{BRWyW^i^49^+QQ#QUTw(QCVOM z#b**qderH-D>htS*s@Eds<3t?`5`D)>Y1dHx@9qMcG*}~Miz)RR0YipiZvRqv+{|R zK2);O?f=|_dhzWWhkUa@%ER<2y%#Nvpc}xn8sAs}Ged-}hS=xPj|aC@w?mN`FX#l? zHmy}$xW{@=7x!bMM?QWmMcC-NzWrwSyTneTw*Vw`ly4#>Wb&oeQU;R)H0AO(biR!wjWu7*~_Mn*h zXCl>I{STmoqs8)Ote(W|$0!>?q9h-@zNNl)%ZVi*XbEy=E_dzl@nb4j+~K6Hr>|Fi zHkp>)0_u8iSeN#iKamgtpM%SKf9s^Mn%V#lg*k+=pdB=~-&n#SH$^+wyr^T(u%rXG|5&Yu)>NI+x$JRuxTI!=#bo95jPx}2>`$;_eU8+*S;M*EUN5suFcE@&a7`+&Iyg4HGa5?w+uFjgh>=;3bW4?f!1 zWqq)=GGz2%9ezq!E-3k24$8T6w;5Rh^f- z!BJ=ED|G!U-=iSOtl0OAvB_EhC5+^HzYRV2Kv1sn=f!~gB@CZ0p?sA_pTB4pW>Ivc z>>NR+K-Z-or+@FxDlp2Yy8t> zaT_^lI_4)u4?gip^+j%9_j#7=0aLj)8FuVun^8aXGeh#lm5Ddbe#EeU`9~0{5Of@W zB-TN{5A+D-nV>l(kXY}i4bsM2kL}5LV|#sZZAHS67A;FS?wW7NiTp6M-F$UyQGHD8 zx-{)8?v|b_ZLn`fdP_Iv)kk*t^IA!JcXx+O^c4y?Xl58-_b8yTY5n(Y^wnLmm#RAX zL0VXStKY^osE)-SH^(P?CUhMd@}g1W0f%Jx@C*&#e!Yw36F|Kc z?B9k48T5j^?CBfZy%NW`WGa0nqcgp{>8&|pozLs4mj@|dRJd(Ke_dMBuMmDnz<_@c zUy$6p4DIIO9PRIb#cQg(2ld*|S7t+ssc&uHMu5`2{EpMYHqHe7P9Sv$98`i+d@RS2 zd)2l%B;+MaL9pJ6x}5E5FI5z40hzAzAihW-P|wyPLlhd!@8utF03OHIgHsaD?f^d<6_rKNW>-eT__KbyU#+yyHeuS5m|DzH&v&; zaB5gi)aR0sqS-D109ErD@(U=N<5*64sqEl|9=6leQh}hdzr-0@o7i$Mr(^EsshV+9 zK3RH@nMcBBx-G7fR`u4|GaGZ*)O3YeD(vxlS8n43_t}X8Vwx>WjM<@n`NFMQ{B-(K z2Yt6Hk_T$*cP|~-kuu8L1F{9mL7N`hwb6&H;R#yqMznKg8eO?Os*F9SBS*1plYycE z)z4~DXtGbrve&f8de&`<${gOaK{S>h2Ubgf$E@0OdDLhe9_dYXTE8bZDG+RoXZ!$; ztsn=(0S5YA{RXkm9|)FL>Dx+p#K$vw=6CpLvuz~oIurAnNV0(nKCDZ75F!oXI$TLP zih0FL=8@rdRLjRB^7>jpjP(|ZWET{UUj|0WZ}hxIa?M_9f>Du42^alZUe?nu;V;m5 z`r!A%moE<_V|^cxoD1irUJ>)2|h01&@1aUood_mte#;Sbe3aQP2CjT z7_VDW9;D-L=sC~ey_VIz6fO&(SI~S3-RU`kovts(?&lVEU0xeCP%`q)W&;`Vg zXS)Ds_*F2q_)h@^{^7!HH?60jxc{>;ME6$P#d&6Y(gzDVyaHYQ)BcVHQx(J233u~_ zs1^s_7XRu~D??F16_*}bUFMq+>V30e-t|>kzDvDlPO5GDZ8C+R)swfRR3X5slB^@I z<&W5=e*REx6AqDYwQ(Wb#wrx?u6?gljaHxb!1bO@W#bAD_l^sHa&wXEBju``;y=h& z-Ef}~Q~N!`eMP3|{RVwbvM++E72KaDy-;(}+s6pRLC&H7=w`HpX?+9}hJq+ z6ML7|6Mw|@3k=Bh_CIy+PqF&-iMJe<0x-hN1ETc=>Lt3jBB(uHI_2gKD*9UOTz7q( zxj!?U!b&G-+IejtQBdlmTB^2Ce0wH_T%H(Xy}zkRg()P886{&!w`B!`Nfo`lf?#;Q zIlY6D8~Q3Gg?~8~P&4n83N5{=8Ml*>FeunnaTwJTneY&L?TND3kKzTa*p>c&@jNi`}Yg?|xzqLe)^COk=Ih zoYF`+`Yg2Q%j-M=aO;*AI^i9BcRh=@`nMM%1-F)EywSFqCM}KrUQY35;8m~q#bsrc z6~Iu~ZsXQ4#z{iCJtXxW7Be$ed~Il*r(p6TjM8a2Ks!k-OI{*gd^og=cl}#mkfNtc zTyZ|xWYB&;(Uph<_I!rEjQtePX)7xec%qx& zY@W_#+rEr`3BmRZOQgscjC?17SLi9$48(#^cAzuxlf*#s_@6lvuw4cbMyZ%mn2bjQ zF9<3y=y|FS2y$~lHkn;V9>Unr3yTp)gPw!0Z?qOKxYJc z9qaLs!k&A?bUl;qXOl%d5o9PZXRzlhm}5g-Fuw*#D$w6M)*q{cwPS-1ncGC%b3&Y| zwiByOc?sn@;N!Nsbze;U7|@%MNagTTv6p4-Tgmo>X(XZs-s?vI_SFp@!Y*p}mZhCO zz?R1z_2GEGE`8m*a@P)MVqyFw6;h$W^+Dc?b8D0F0V&BljWu2y@`OHpt2Ig{$7_=h z_^OD7P3DmChJ_zSW$X5;q=mnJX7}r~eSDb}ecREJDe(Gsv;U>ZID=BY-}o5nv)P8^ zNQB?8pe0!kyUpV}*6uw$VzPAo!x78(7n^^7yRoM-TNgu={YF8GCUT0J15omk!E}3*#@hjiE~LInB*0{LkY>>ni7Lar$8znI>~oq`UWi*(;-cE z65i3c>yomiilXXM4cGcJ4P+Nu;bg;cg=tm6j})ki17tiM29>Wr3fsWF*1mft#>LF4 zF_2fy;iFC*;uRFpNRRCoFKT&%nFXS<`-i*6?%+b_)|awG4%6^~FHpmzFzWX$EM<{q*CG|-<-DCQbKK{(YBvYauSJ%AXbDSe- zxyn!g<#Vm=ZOhNfaa1pgQmbw#YRm756_+e}j#!j(QzKrX zgEEhPjXJW3S2hHx+%ZfrnoUDWeXofr3T-<3GBwESqe%*waf()0d@!%Q+a1&TrX|l? ziX91bB03mX2i1QC=iZgH$fTnBV2%WJy~CkJ$9+Y{=OaIE_@gbZVIgn$NS$!RA0o#i#e-llj zEI~0AMW^e(YBWUsTtC4%`t@RW$Ab!*_SY~@SF`U6_si2tf!>gaUiA5L0c2zOPxWqrCW>CFnnc?4Il~H0)t*f;uh6dz_KJ#nj^?^y zqUsgzDB)Xcw6IdFMx?teqD}+BQx66Nw9Y2Zd>=~_Y#t<$)w}tW%4X&}7&h<>(VJ6m zo#(7J6fqVA7|wKhUn=V0j5I>ggGspx*)i_$-5laq?bm-~P+E!FXd zGUC;}C>7rAZ^;x=KO1ON#T$hRwpEe=ZLrk! zaNozQd!t$Pp9uCq*Ga>Z0Y}de7Ft5hiSLgSvS$Qm=hQnVl;whZ3JP_E4aK(0Qpj~4 z^n+_5tvI+m`<&=(oF2N>wt~aiaZv4n9e-I9DU80hoh_Dp^Jh*AUN#e@EhKV79NIB0mHfFdai4-9+l_X`O2OlP3r3**+(ms;&dS z5B!_|mwnAy2u3g5hlmMIS!Q)Tb23T}*5zzYk0{lPehvC=BN=vJO`f^co_n{iKDa5e znL7~c8EOJ7PS-Sc`ULY?Jze*-jaoi;F4RiN;GGb%6XFLAdm7X4{Wdh;vAm}iQQ>PH z$B-~7rsasu*-mMUQ|XU1fxOJ^G?Sec;?~9uhXV}Gsgp9X$Q79{zeb(ye^_H283tC*nVq8 zC$C(!xqCAqJ6^D$LHVMnq0$B?a=NL9v6`aNmA(Dd2S3~O+A z7nxpZZ#}SaocV?B6l(m{kKpTnDMzrJjH)Jvxj6m~vgqe8qg8i+&o9d|J8QIz0^_y~ z`x$ROqha}gRD&rz!QMNN-1b3`yz5s#b%ti=RHX@6n-Y}&Tu^zHD9XYF;VznX7=E`< zWH7v#d?`7rDFV!C#XJ6p(^ri2=}bD1A15qoh)?i; z#M;|wf~VYoBLfJFKHxo*q17x*6g?dCHkuf!fiH7E2vryPp-u{|pZ>4-2FShj;CX@I zHDFAyst%k9>vvIFQPp-=8T=NTSX~e1VMEPp6f8c))Ay!6#M8WwPI-qG z^Xd@x&)#KKzS2Td5`E`S>DxbfMW=#CfQQcrb#b)RUc2LDQecKZSw=@=R@;3YtxA-T zFEJZXZ36|WH?Xmcj>}R&BbbdRc|CX5usilKU;eE${Mr72WF&rJA%)$3wJEC6DTh-~ zldkdQv$fmx$=5=5Y+5%nhSgHTsJ51MlKi(Uzjrj#K#I*p+;cw+QzaY;sdBo6=$0>ZWt|J z@9#2d|CH6%!7c>mA<&=KkcB{F5rWzmiIGRdCH=;WhWFdAU?`0d zwrY5&$oK*G>@}1>=W$eRcce_6UTsQxEt;+-zQzd4Fmh24xn-R>y{BdRQ3f*WBEWAW zHLcERzsdCitSKV5TgL%!8MF`j8mGc%ru#o#4gGFeXj__F#MTParNW4(e9Yhap_6oX zwhp&1AQeq#2#QHIHKxHfblExTUVmV1c6z?vzq3#;37Zd;{YlHEK2r^s{U5N5=K@^H ztqXQqP2et5n@%a@+4%%vZsFxfx2x?u7kE?CSikt&@6SZ;?DtA`bFhCNkY@r9D^ zo-d(+(~x`7;OSbREcJYkZVaq}tI9~S=&2R0)pnznH_ zEZR|~$|ckiFw2A8_F^^%1!cejHY;~SP-k{4P`IUcjtG_}bv-+cQG>qPTDiy-0-yb< zB|gnCX;8xVPQ$pe4RZL((mb7e)pm*ep=WtSbNtDlYcU|BUr=0)-`G9i5UaHEG&Ewg zv)APSyXB$JO{AfHQelm`9EPfQbA}n~3+g_J zcU(CwWIoky#2Dbi0Xf|N4qpGqG0phIl=f?}dP!wt8%NrOHaNY9yQnFVb;e6x*%*A_ zGk>(DKUgCCrd;H+=Huk`V_aKXmb2tMPf#(>^|W_Twb%M2tFlKNMA^D^@Vl{#j4{Gd$7!>=FGE96E?SGt)u%4eXR|HnQVWs|piE$dCJaw;rnX%`djLq3QO!19ES#yt_KSP6cQo*RDGs2_j z^KPxOrIvy#+4sB8@o?^&n0whmvRZq&1If{$hc}>>B(lR%KXBx4L47&n4o|Rhc`iXV z)pSs#S(SLDH}v||Zhc#(+as5{egt0A2k&_YsT1bkU#)m#w7Y%FA1dz?7C*(cIL>|& zfg*noPH@a_>`n{x@i6w9fgf#kNm0VAc(Gt=EIB~o7}D*{V| z>J)mEv*>BhqgcB2UZY=QsM0@}*mZs1ZgY>Vi_t+hewTBxbv~KhL0t9u%ER(E@gYMQ zwaWuGB6&bPLwxvu&IQcW4pvKBZU=nP&Xn-YYnWce;@gy0zyj5;XBaPh=1EWku_#Gc zlMqtu4%nYly=*LL*GDdwQh#Bj4P^<}t(CvUrI>t2ewpeIweIk{DhD+2G$pxCt^u^9X5YW*=jVf)!3m zw2)bhPg++;s;e2Tfu-fX$`GwLLLt}`p~Ab>_JVhGk~naJOx+oz~Xf8Fq;sOn$ev|La~a`WWFBdCv0QWFQ0(Bwzi@ zRuL%tr#;OR=NUuecIqay_qJql#=FQ+Ao1$=UPhkWSy8Mn@R&FE^Mg1^n;`9%R9n_h z%&xuKIE3?TW<^=Qg|1`$b#*qsia!fg-7Gh@i6G+L;S^4ocMULOT!G)|)zgg=5&Is! zQG|DV!G#^xYgr@1XN>(xw+Az$y>)X)3F36~lAHAY0*+MMnBotxRX+!IQz^a59IPcv z4LHqP#KE2BtQd^4^Tk{NH$sNK z-l;E$%UAwVlR-1?{|qTm!dkB~1Q_bfrsA3ZZf%j_>-_HD@I^CI!VRur&fYDN@a)AV|gHPW>gEe7?7UzZ=AsENUg~@hz#TiAur;r%5y9GUbtueJrGG^{qJUeft zkbF*54Ho$iFh1tGO0a}~H{x(xHXeKZ19sZwVWm5Rj@SPcSkAoI#KFc9528fGKzgTG^gqhT`&6bv_7k)KAUy#p0J?Z(~?_NLHRT`ilL;@U|XaC9aA}N zf|puBPJ(pHtW9kTgb*8$U>cOrRvvi0kGMB3Ys;o*wHfPifc^zcS#hsg{|_)=ab5np zk)$1GeatJ&J+M`psp9A8`}__oQ(#KYsnM)EIm1ra-1)O#`^P0Gf)CvBRJ6UQjWBnN zCVklC^qmJE5!Sky*_PG1855vyoui!?f*=t`n8pmdXC%PIj9sx{+n%(H49Rt$P=f8BiK;GNI@u=fr0$R!*iU* zkmOC6FSu3kg6cfJPDF~}3jHO9$E*6x)Q!^ek`d(*(OV{qz9ABZ5(htNU+xc2XMlOx zFV`8-L$3NMT$X!PH=dSUtQ@2zY=kzn``WP_XE}v2H^9P-PXly|ir=UWBE^JEmS~z7c2a!$P zd7Jnv{egE8!w~r84Db}3&p6?a^R^+Iw&_T-+jCX{^ExqjEncg0Z8HlITdh4TaPr9B>-V04H<<1O@t&^7{`%!=n9^b966H|HH0Cug=dqp; zcKfE;*A0C{)*3nAqW-mF;O>PQ#$Wi@e5%cSC1Z%}CD|r-ScRhv?9qszHZtJg0btsP=94MBRS{Tbt%=i21rt%LTTd)vTl@K2TK+YzZ2{7+N>*lPBl3RBeX6c7|^Mo$ZS@ujpt^Bg5jBahqyqenTwa_J3kjZ zMLxZkuWCjHG{um@Nqi~a3oC{_F{RTqo@lyKS5QI;KMo+r(?D`yw?@>n?I~uff~Lj$ z6vln-SQ~3>&EARB+XnI2M+x<;O(p9Ij8zw8V}Vj+cP5J*u2y&o;9t)tNn1%6w9r3m*~3z;&;^;?-ZBVfKAsUdorw zX8yj>&U4&FFQ`(m28w3$45*>tug*~dz>O3vcj~&Lg5_pjd*N&Y9gmn#H139k!mo4g zK~--I(s%K!!*#{BGTzZHpY|$8RE^XarS1IlO_e?+Rb5NXjsB$-sCO2>z-^8cKwh&G z^@Fi*Rwi2I}A?c1WfC7mJbx5 zpt`-D8`05vQ;Sb2;X#jGznv)t)n?XDJ-b)X6Pau_p*k?K3huIxT-u%_e^0A}3oE`= zXp?*pZsaNBMNU9aVDGJM0w(yYL%V@87v-F@T3XI0=LEdZzKy&sZTpXy)$#8rf$2lj z*lwfhlXFrVGfsueKXr#44zDlIWDk44owFZS>=R|^d8?c*JpY8AP9{;c?^3GT??dW9 zZt^49#^ql&U#+&bE)*X2y7An8n&yi(v!s`C+3&fcAchYgNjwpY1J6zA`tqq!@wU^r zf|*73#M4d8Qrg>J6x{bL7)u)wYA0)8t?I+8uJq+Q$lZ?f`b$J*OLyWX8Us zJsewi0Ov8*qDKa#3SPZ%onp!6OI8F;uE;wz8$(TQP<&^?3Qe-CK9sG+w9fEGyA8J7^pB6VX3^1hJX$MH9F0zM%<*pv7xc!k#jB6ynb z92i!mIe;F{DejuVg}HecZUjWv!Fp?9Dy{GIpus~p$JY~*L2{!4qaJ@?_X%w3&DVv{nJM7s@-w0U@MiwcMRJvF4~ z&_}P1W3Dqb^X}UOL$9(|<6{D}G)>E^CbSJiQtnt#EVLG*x}u3$*jF->`b0k4c+bXy zHrz?`44gc1U5qSH>-k|xjgNBFs_JwziaLgvS!teIFQf(W==-eSbchHsZ^9Sr+o{_+ z#`Mw$1eo$q$1#u|V4ts)v)cY63{bsqVAd%6d7sOFJbh+y{IGWnq47M*BZipg2JpQ^ z>IKf2NAiXo?asRh`9vXir5CBM+)24#9FL)DV~B49VY!Vp1xi_8X$sP2bm3np;S~s$ z(ybCE3_1IV8gYH!nIoR`hA+x)ah>f;RJgr1#B|aLb^%zg^yLMRkpSTk?5(xu`hup z?a_dV4QV~j<1AWv^zfZkBmMFGxm>@~hKz&>e*yd5^nrcRha=(qIh;K?GGboZnfvaP z&EBh}`YEES_aKd`T&Lg$OsBY+TeNy8f{4L^>5TjDs`l3BgW?)~5>t6FFfot9@8o6&eLdA2rIL7Er{Jz=~*+h0W}4l-<*NA1zFvKSrdMp;2On zW|e67CfHU@j7}q1y$J4hFh)bEOHY1mH>9!rfmQ!DN1&c;6!9K=4b>=7FQ4fAC>jlW z2_A|Hc8q(UX?h5D=(9>64u(R7N}2s}{-t_)ciP$SPJjg}MfET#U`1)AN^H^9CvT;O zyXw$YGbQqf~71$UQHTMwOU^Ft~kZ1$%q;pKahQlO0v%(KA0DEH5KyQYwV zf31AGfD%u0Pb7L0c=|a)r&I(Eo|h^4vFEvAx(M`J5sCihEj+lk4Q7>BF%8@A2FT#1 zi?zmF6nPI7#YBBVWE{dAMV&^vj#LNtE9!V+KGt`}lpjT!3~3+JMo7(bA1u8+x;w-< zft|frm&RqBc^5lk`WfsedKS)EjM@XE7k^pXea!^OgcsXssu4n!R|bE-LYGxKE^cQA z+}dA02#R7PS}^?5ex;4F*>gVNPRee21OL>i3yCA8_fKv=a%<9R&2wtYf?mTsB6GR$ zqij(60C!M$^qX$D6_RV{HqY)cITmI)SSoMT-m0jecm+TF6E1BXY$}+F#gB zeIi2!IEBM3xlcMO>z6Iv(7_tYC95x53ngTj9)}$>DmW!!(i%wb-kLLydnq6-bvnIM zSbAx&sNoGG1qB7oa`%@Y^>@Jdn<&`td-X?@VM3biPA;~wieF{*vNRZRTd#TpnJr3^ zCLK<__?^spf2!nouwT(hr+mi663Q1TbR`60=u46kOceUv@xxczvIge&P4VJJoJcK< zYPEY1X5HnDM3;Wb{P_N>MBspwtn@BR^^^9U>uDSkVb8|%l~Ff85}yP1g~86ZjF_9e z44A7vCWz#Fv(ixVM& zPn9;720VTtzd;Utr;gv}+7aHlx6^Q9v8qzTk-l(nBKjtHDHF+lhorvc2T9A_H@9#5 zepb4FU#{`{BN5DQ%pZmTE`Y2e-K$)dyXYv^~y~2Pz!urxP7|=CB<} z1!3d;XM*rFk;X(fG4G+KL3lRskC_KGe7c1!#|p80rj~9a&b278Uur^Irqmt>wfIzG zav2CYizS^XwuzTW@p*1!5GR6c)zU^bhS9>4FT+m`YgOqzZJm8?Ox|gL9niv0qJq$o zh6gcA{ElC?DuloWsN1;xepFSW_jD5r0_*W>sF4c;Hl@(=v@IgjhHEZI$yDvs6;b4E zoy?j-#?3N6sAk^k%ic@F3|pPJ!jYA13~-B=@6kdQ)bQmTab!>?gS_eDUYITvleoLK zRZtM7`=Ro8>m{D-_3u)Ho%BUA33P}7u0p$(f(HXG?ZB+&LFR?(ZhH8;O1q<_8to1& zv+F)-q}We;r?~AVssepvk<6@f)%X=6BIEq|Ic1LbXjQb1+BejXg)6#~?vs*QhC=Vr zEMC6{=L;ip!Q_c+fm&Y9m)Qh${{oH5;3< zIT|*#ap%Jf*V!a#nJ&K7S1)SpO@C)=cpgBnMZdC*E4qc!Q-lSex3w=HYgJ)k2Y6cM za&=@v{A%UEvHQv4;>D2zS2Q=~Zi|Y0UFuMKsN1vcuWv-TLuKqHwhEFrY^(q&Q~28( zx$TEbd*^IpZd9K%=^ij%8ng8|fSl!DZVA*%>eef^E}wO@MoZ>&It`iR7@hR$>(d&< zQ)E3KK1mEhD>~(Et?oG;_o8YO!QHuf24>i|iA}OE&b>Wown%-6Km3SJzlnNsf;--? z7B$$NT>2<_bnn1}ueb^(WOOoqw3%XWkaXl!Wsj@&`rWt33>T&Mw5yz1Jt^INi`(ov ze7E#gJMp7|%NAfhIQqiLWhv<7uIFxB&P~azuA=#eKW8v4)SFuGl(D3jzp)t2)-sd}zDAM1St zkKR}{+Izgcekhhuy1S8CK*4|XFg(n_!FhWU3vf%!ZrOMG;g|~gj(-^p#hrMW9CM@T zhUAj=N4@0}4o|A$g3yo+o1tQG`uRV<>vMWL{8F(2R(}GOxXz1)`6{fa?NJ}YJS>by zekN&Y*m}Ix?FTg9f_LnWM8<}vaz z-12M#YT`371>khB9K;K^L9~|4i&=!FwN03KEo$r&_sPYIsA;>zX^QDZRh; zxQeUxMytJ-mvi<}6b0Hs5{-aj z!#J)gm!lKO6{(M_s6pqao|pJn&k_;6n(OMcSU=F$=6I9Mo;QH}YkZyoH%v1D-`KL* z_~}4N#B@lIm-YG-Th6%0BHM!(%9~t8@6oNJ*vu;&+<6<{<}1G{$uxfp&54CQ8Jn<) z60~_n0^uky-1GYgXFW?&&xKOFgx~5m8ywzjv8WbPg>mh1WtYvV$sf6gH%#x$4egk` zlkqmpQMLA704{mc^M=?}PE7Xxh!Hk+jqc3>67aGM=dwRZJpC6JCWBx) ze}5IsDck>@7!bxqup8|ju)gyT7m9KY4%jNI;_qDFslDW#)gnxeCdzXLwskz8;#8>h zCUg#aMDk6WU9Vj5g(gOKqWt%^|}{(rwH@6Y0sbC0gfw(upj9FhyN1 z?7o9zUXc$U28Uf7hAw6>f*Ss+89!#Ya8?Ty9D-NiIG zHQ+`~U_IfDl8!LXWR1l=^J{v73UhQ~iYrqe*4s^6trgz?F zB{2gA;VOA_f)++kfqR_~dFa{lcAs!?Xe91ejkNQ6*8{k=ME+yVK~1sL6{pOW9G+@> z-ry$NFsLboR*PJ_n7dE>ygatTa+3uLc4uUnHJy_${cJUllgxo}fTEWEP3O}+ry+pO zN{d0Ozp5qm4lg=t5 zUYl&nS=atq2WKVSE$*+%Bdv|N)KdJgFa!MK+(XE7DJ@WW#wyI|BRgHNS!K;zZAyS? zW~B`5knW9^^y`7+;$6sj4O8pXoI6WiUYvOYkOb3AAuX)Nyof|2%wnNp?%PA8@*Fc< znFg+^^Fp6K0(xQ?7sOZgUCE$T4r!wKGBD$2*+UiaS^L13%sZ~lOPbF|Z13_5J{4ib zWJKfx zZP$nO;`%lQEx9V}BCX|+A$wKY>(hBefwP*?zuD0l&wJJxE{YgS91e*g)IF_Iwg)ou z(+2LfWJTfI`p5;S!7&kaGlIJEDZh!9mZeroAbz1k>1+CC=D9^Lgb9z<8Ql-}Ck~2* z%$0T*Y8x+&Wj@K7wun%ioZyq1_7vju+WHY$45*?czY}u;DSOoLfnSH@b*qO%41s69 zY-Lj!_J}xbN54G=$S~lYkF8}-PU&|HjDEV^x0i>YI zV}vg5tx+%@SWu?cNHCJR>ezd>nc?XLK2w|fBsQauw0I--FRN?KXdmjO_ebldQ^FlD z!wJuST=_YYM!!;!>C1qa=%wIH{K5|8yoAOVzJmQ3hP(l#vm6-p2uQR~m&^qln^Vc5 zSifgU(}?RTMOs@V>6N+gcI!QQ?Xc%4n&#gl(y1v;idDFf)nA>~rD0(=u9+v&r+vBWF>+u` zBa_xNGY*6y1dwau)g*_$Km$KF)0>_k#B%t94SfIZZV5s7R0uo;|z zEl5Vs&qcCf_H~kD2NLxX{*c>$^vTm~O?AP{mHnAq>l;DndlcK!cPXAe&0gx7MVQ7p z?@sHXsZA-A5i|`jYP}@AijpUpz?T7M%4-`Dwixc-_|KID^G)!v0mAHpxy;xx{>oZv zcO&ufom{!rS!x~Ds%RBoO7e%+7*oh~ZFwXas|Y-gE|mSB3-6@849wDOx@u~({Wgbw z>53jJ`^iG>(97$Qw=h!`8x*3bbjQOx+r^BJO^Kt}=s}q{7+SQBI9mGBp%x~hO%_)SdR^kj*lk%11vP8zvS2WQtw{>g(`2o(O0^$oVn#V=gZ^PD*u zQ?YTYOTTCDmT!9uR)Aj#z_om2nI(VhvMN`PPO~|E8uPu`_yh4fwa!b4_^zVyA zaPm#McEHOj{&K{##mM@MtHt}Vd#0ZHuG=^Facqw_73!s z+ND@JnPkxP`tU3Tr|e2Oq{wbg4y!4IK@*`KmbN{a0r{xjn~}Yi5#h6)31pO~X~_uM zd?JI<#mONFa&WbON}gK(jebXN%LQuqLxSHLFrDllh|aEVuPX0=I4+rK&#igSF#*~(p zQUQ<2@;Dk|Jf-7X9=(SO+X;_d4Mi4yEdIr?j8+oSY(x0I?T zv<4gIulYZT_tRhWIN}ZmG-q8^Qxp=YPRSSh@#6^5cr}4?q}_Y}p?+&d^$9wv=0B!D zM5Nisn5x>m_wqWCDEH+A(60u6?z89O9wBul&ivry`07L$C1^6w;Nssy!BgKxzdd@X za{3WbNR1wC9%7mLRR0h@5+-4L3zCQMlJ<6_U{8!G$t5D9j`oI(6hn&w$)j5aN zm3|Nty>gFpD89-7#yV=wC@8fRro`5OuQvq+R_^kF4jqxwXQj4B@W2a_L_~M^g;waN zO~DUi?*}}MvsARb0MgCSd=xs~4}N&(H9!+7Xv@vH2HvYeDY!f&h?uB`x+z)hGgSF= z!#AbE6vACjALt+evgX9PWe~nM=Feby&oC1%>nQPjuPbrl{4f~2_`cC}4}D(B->W(D z$o@P|8RYC&4maNTA0A6IM_YyKhuF1WS}AdeBYA3vs>&y(hovGZhuJWk+0X!}05|PF zLjv!ukHBdi*czCR-eLerS#z~e4ymjUr-A<$IYjdi`jkX9k3t{Ft{g4vBJ>(y$s-YX z8dPmQSR~8o`2V;!80?ALY^Mf+#pmt+zZ>75ZbDUV9JI%vRSKJ7hr5*6=Bq^r-U9Ww zLX2?fe~tGeUJzUaW8Wqe7+16&2FDNy{ChQn%bT^#6N+C%3a&H5*Qcj%mVy+#9>x#4 zWBr93c^sUGuh2#USz}SxTxsD=jUZ##DP5y+T3waym+Gm~%j?+3Ru7jcd3h;;CvED& z4cFhwNAFFpt1iUzm_nqbr7bi@dS{vlEBBWxrtJXJc94Z$`G;|Xk7+34$U~4I{*#wn zlXnIJpTjD^ncV{ytR^b-|MA7YRBi}nhZ{V{@iApud}|Yf-x{nL5u{gj7@No& zoD$S}q;=?aIJ)~uIa;4nloR+rCiUX_(BIYmFK+*4HNB#vQfYVK+}1#{SZ2Y?Lo36~ zBBLEa0a|Ix|9#E3p{)mt&zG-nz3;?5antuZWyilu5ZoNjdSF}W9tY^CG}5s9NcyaZ zc8!!PMb9_o46tGRhhvf?Os(Qdq{b`fRS;A2KHE#3Z4J#0*bwYc|G$?t))0h11Ucfw z1P6V@MsO(RyTm&h64ekjhl5M}6=XBP*Mfgowno9Xq-+CmaHTa{!Xo5w%IM!wfzYnOVM40g?L$(E*zWNa8s}(-^4pL=4ZYznl&crN0*So)PEXe8H5W z=F#~NI(LsiSwnXr+J)OdMZRAwGm)XBfJ8eS|NOLWlkz;yJYz6s-B5e|SU0`0P`YHg z31PTzVS@^2#7&OaYN3t`iJ6r9_;e-wACF!5y3i!b3)v{LvFF`rFJIx_0DxVy@J0KQ zlosLhd>iJ@RL7Gn$6sLQ`3U;pBdEyc+?EuPTB#bwM|0zzL5EYt)ew|<5i#r4+Se5M zECmmu^?>(ktEbj1i>Fzs|o(;bWl zk+^cnFP*&NeT%2DeTt-t0LkIr!@25eh6ZRK3))t1=W%I*zMVdUwvF>5@vnKB3l|gq+Vg zUJym86%${*T6_fN*;#2J!qE5D-5+z8&V6Mm-<$gwgnC^}%*R#`s19zMQw>7-1zUXy zKskfYC*=`r!NJtVs{yB6Y{-x5DJEv1T1v|Q;2_QAQE4%=sL zItVtLfrB_ZlacFs5dx?3^IcB$@jjbHf-@}K>V^%tw{kNdB*6`t>VhY`du^y?4U~2X zu?&qA*2g8hPesBuINg(I5?SXj-)b&zg zZbj4yT;gPNWP*XUWbVFXxPE7(?k#Pzvt5~f+P5CR=dm4nZ!|t*e#_G;0T|{)WFP!s z2PF?%xI=%<)EC--Q@URKHxmga3EX*MYA{h&9peKN${3m144+79pyoyDr zZFZ2ZB(JRA;`QQU2bVV^1qB*n+~b55k&O>|igIA!@b9G`VWtQm0=$&4YYR#*O#(R) z5KIKV66B`^e}h2q)rF}3>%q-azbH=f&Eldy1P1K%F3dxyi;Sf5=qR$HI?AT!U1I`R zszLh^WhG}c`v4gLg0JAjp}_wUc{VmA?9&ji!RZ6V8(?xTIC12X92p5J0NZ=lAIBFdKGL zMbOyA-Ua8-UZDj32F)&rJk?F^jE8k7B)r4NGqutwX6iV4A4p7a3nAlDKpRC=vvl<> zzHBxIPFNYAPk3KZr-0d* zgd?DVX5p~!F1LoZIaM;W&`2t7AP|_*JapsDotj@Mc#$j^DOtI4ul zuc7d&4#L@?)#_#iMwxlVDmn9-^ZiShj^!KAX?K*5jp80EMzm$A%_!j3Qg zc_^4yR}@kKxFMwNX;1KILlW*^hCe_5clB=m&()JN=lC{I(#k9Nt^8BqPOEju>+iiW z-T`RA((bm0RgOcO?VrFCbP!Y9(m!iR;jHhZ)&mfs0Ir}7l(}xNCWCvI;a8jgy>J8} zY@s$)1VF<`5chK*^n?_%A0*I5ittNJ1vDdAFTwLwpJd?94QT3^jed^G)1hHj@y@Lva zMnz4jZH|VYa(DTjY7U(LRqDNbVdMrTpx?L*DbV~P|qHDm(Px@(y{Fi}(bHPa17`$TN z*x5nPvu`P2HDGk(q8+ti3w%F)VUk#jNA~ zCalIc-Y(U=@CS!xSNqQXUi%szW|1jJOl^KV{b;PUtqZ!q7ROoc+FOuwF8R8vIeVgX z#3hX5{%=a#?Z48)lyzwPR}0_gTW}(mbPg&9FK1c2+`$acIgfIpV9{uH_%EDmlvq>` zuX>-Ke)Fx(xB2#eTvk<7#@Bg{ujXHMCH&~wY+4!Zd@^vuN@r!P^tD=G@mBbFdF zfG+PQrgEOG;n;eL(`CB+0X-2DHmL@lIg+QpAPfU_%#1-@F} zK5^xbdx?D~Yv}#yN6T67<%q^snBF_uCPNOM_&t>|Bh9=sA24Z~$UHmpjlaZKxRz4t zBB3*0t%h%p?`(njG3)50DE`1W(3Sf-*rD8QmTT>z1fNwMY(q5@ujuJ~VbT%;sd9_m zvMi8N6y8@@vu(%iyempRV|6-k#&9L?Eae;0zhnn{v(*1G@1sn3F_ra&xx@8)xS zF4&qRIILD#$6)iTnLOkMi(TwoAAaa^F6b2#I@0f*6f)^&v-o>;aQ=j$nqcZE zwJE!;aZ_u!(IM=7=isS+X{>b(lgi=J1xNGqiOLY&ohIrww|w1Pa3`36(63mEz!ujq zd0rr%tw_;$_kQAlReJU3nNQ6>OMgxaGpaf$alPI$BEgCTf}f#KzVPsDanb<#r7e-` z-Bh31`Rky`!MT=67_mT3wF{P{@vs^$xn4u(^D5&!{?s>P(`%V{Sfu@_Y1o=tCZDZ$ zTXnH&bxbD@Oe`x#6>r}v{78a$F?=};?~njKyD6lO={&3N>KlQd{m{xFA2+tSj_KO2 zWp``wKOxQ5*RZ1XOedLFYq7|BCgGz?NxAlk#cw3@l}!!Rv`XI@$N1+AR2vF7UY#U< z!6wx+DQqo)u-NW;(7*h9I2++j4b2Q?scc`|EYbaku{Ump0`@WjK$x+w-B3596LS=d zdG$33*!5QKoXZycqBvvv;jFDX9r5*rwOK{cmV+9j2Qxx0Wn$x;mZ+Pua_HnC+mNd5 zz-;{~XZj1E%h?hkxte9E8!Hz9rpm|xDYsZm7sNgtEBw^#E}S>=X6BiYYH7G}LiA9E zc<$8d;0~wM&>^kbtTvi~X-0#cFL~Ll3K-L3(4H|FQT${({L z5lB-jPkr1%+^;EzySjclE0(am1!MrhBr20`b~ZRm@3q{nhpdcH298qyo{e~NGnH-s zG405M%B-NTpHRl_8VssKp|jhI-pW;ggj@?##Y}y9w#Qsl<$?nYumz4un+Lq$x7)zK8EmQN1rF;eU$7)~3#@3P zpy8w%R8CVmGX!!6$}&OSP)T3wep`%)aT907Z7us$LIq*yu!nC7%hgh>iI&?lNYyvR z)?{LdswK5m7^N-oRX?{gl->f~{zS5<)a9futD&g8u^s>1LsqF1?u)}%tY&T2Lfk@; z@pW+zXHXko4gP!{fj3PH%?k|=Nj{Hx-DyPR8WqZ3^Xk|$vEXAGGz%_}__-#D*W zVq!3Q=*ycQmJ(Bq^AO@|?qOxp1vWZ0Q_4P&TSey!`aS4bZ8&Yv3@^h>S8L|03PzRWYrOmtFEN)Yb0Y;~f zvHHDIjaVF7KkoxQdt4nNIk;n!pfeX=y-swo!o_H5CE4r8AY>9I3*^nm#HhXGi_p>l0Lx6O7+3eL0Amm&B%0^h{ z;n$sFw3muxlTrU`%}y&PJ5W?=2)X*g#Qgbzyh{o!CZ;%uOSxc*%7JV&bJyIJ6+kxO zs+BWEp%2K`Uts(Dh#C&o*<--Q{}(ehm4Wr^;=U^>M(h{AH+IAp-TVIB4jfO=Nb61N zWi92=knoV~Q{`*LpKiCIGDEi%&rfAFJmX*H zeJ{pbq++G#bs7{plu;6_fvH@0z-R^pF~_D(lVdkU^TA&W2uqO8#|3_&A_W6p&ibr< z#P(C^qiNUA_B&*9aacd{xNjefH+llvKkm>%-^Gpx@%7GS%B}|Ezqjq!^4I1Gkr9A& ze+>s2TiC+1ANr-HC2>CzCEnGV5!xBbS26hH5n#H0YTcrE2!3qIu)=17emK7~blX*} zS+cK%F@P1m@=klC&98(;EtTzw`+|(Ul|1c~?9vw(!%wHT|D;cz zIT57*`86%%XILU*io*xvMBBGB%p$gQY0z$hvXsl6R|jLuhbl~zBk%Q~txW9`XPTP# z2(H5H`m%qMkXtqdbOY%D(#ian7HXKiDtFi|PC{qr8YNqes5gW0#gXE%=IKuj?Av=i zvt|y$R&Ar->VGi<{EWe*S2IUThcY4;iVAv{vSf_~YhSrl8~CrC6tOZ*7*Jz(OzBP+p`kEcFOWlnYR+y|X|^qY1A9f#XK{j`i+;@h)R5*pmG zY2aZW!!Yd(hy@(|zl0COq#pNWvgRx&%Ro~@6*Ici*RlPX_pyHzbJK~!62@2sACE#` zr8hgWBhxFa6yHxj+N2^AXV;<$yQ;cNnOXbTSZX623Idcva>+P+Y|}A+n3}46YbOE^19Mzfe$2T>l9fNQYF~+0@jC%EF-fR;W&aXC6hM+r^|4FKimJJl^F;WczX2iwO^9w10-xMK#Tbx%##yQdS zNRDIaJ+7ZsGNZh1PaGbg>a0rXPP{UV9IJUr6Xm3taydl*4L`z|3}@_O=MPEa=7N+7 z`-pNVBG+VQ`_gQ$T~e&?>leuWRLsn`d2acdXLPg-qoiTAy6_;vispGN{VD5Ga2z+0LaU>xYCW5L*QN< z`52lZ(Q=4~@iW-CEa{xSZto9OUCC|22x93%#8k?o#mlY|;Tb#ARqPHhYbS5t)EjnW zSI~wx_{V^Q<=K$7VekuX{82g!9JjK%tW98}Hj-{QU@?)kO<@}`6#Fz{ZiIgSHUJIV&iBpW$uvj?HJ$--EyPbns4I5PY-oNHqXi4X( z4yH=t!kdJ$G?uv6~^{J!~lUrXT$h_Xn7WQ zj70X21&`QrS{<`j%l>HD9Kvp5s+o(AFZtb+TuRe-L89CVT>kGd!}_+~WVqa`-;35r zjOuhMZ)j0^i%wPvR&RK2pb7->kPfWJNsYeZmix(0zD+0axUj@j58j@iZrLf&65)4DMbuAbr?_zASEgs(6 z=6(lYLAL0CMJ~eguf^r^g&Izz;=A|2OHwhnl-QD z(G<{ADlw#AP@dUvyNJBo(W&3s)Gal|m=UuNk2-mTsVT^21~pg=x~>KVismEoDGm?8 z9smvk{XZuBgPf<+;) zD%{!v8Ajz;X-!OH0!IG1YcB7~<^(G_b-O5HI-@-b?a@JAcwai4j zn_2+)P)iQEsYwX1i=Ey|Y;QW>+;fbzHqZp;(UH`@8~g+DhVnVe@==!!2#f!13oc>g zB6HndbGh|T@=4^bOQG%RO#-ocT}<4N_vp*W%dX&TAa8Z^^IH?^I91E}I$AK)Pz?@h zV?cGtw1}6p^;<~PsB*wHoY@;TWY>;fZwg^1=f(1ErILmgOO&Klo~-WVvU{yj8le*| zu4J6Zts{qzqO!P95ziYY_;Y^||8??z9UNl#e{gaXYvP4d+!p-wUO!4k0&Wt^ieJ5V z{m_4({iilKJIEe!^zS9K;>?EO#h`MaW^e4>yPzQAEnrlj2+XFKthVn{tc0eb(ryrV#J4M% z)ea&W>-RZ1jC!LF*wYd%%p;B>zqip>Lsm%&L#EA|SF3rE#}l7IUj2LY?T!8Xu8wwO zvuy!rA%0U88H&yHSG_|5x1!KKj;#25`+l(@eTOfhvxD+-)D>ZUE_Kk%0UU{}X5ckAu$g z{-p;PyD+WDP0G19Zw7bT0VDHYl$mt|3KN1rHZQkD0WMd&W!yFx?O(PokOK81bhw#b z`?L95NtcOtUit57Fv(qhL}|K|!*kteg#Trh@s)n%9?h%e1ty2W?t(%wz&tba}e;>noB?E0Plc<7~4?-gVHL;iFUa zkCW13qC7i=(WBUAc@pS7|LpqHn~aEfqnHQq%&@)W*pLE--(rA}7PAoWJGNWs-_0zJ z`i#A{D+eASI%M(tdXLFS7n&d%6=^P#^g97qJps~o@uG>{*=_Fciu3^@znX)St-VAo zswbWJ)1pcey97X67_(I*e|i8rN3VW1Gs|&>ZO1&aQE_JEy$swaY$4mHq1SXzD$0J87d78y-1|<8= z4vN$VORg4LgjrBeF%6=DmI{#4tT3r@mn*qgD2DW|EDbhGG6Ks#07?lDJ0s=Gn!gN| z@U8w1vWgnewl2+R=<}sn3FmM3_@gNT62UL(UeDfs1ZgWijpH&!+NJPAO>?=AMa1vI ze~@wj$<>p)m$#E+84$1<@QVQB@;^+Jldbd^P4py0II>wLTI*^6LL6roCH9;f<2)ZL zKb`@-EfH2qtD6@64kPF?H5_4kk%Tf6;H9BNQ~T~`Ce>sltU`YU>z{O*9SPc>Z(D%L zt7PyIJ0Ngk&=;T=m}8{bRaBl1W|N694?ohsdu0_gDNv)w4{nY9?nA}bzt68IN~1eM zDmtkw#$GERK13dGJyxio#$5@5InfRI;wR~pRxLm2%_-))&m(WUf3KkMcZn!hPGsUkF`+z2 zVcj3J<^F%483HN@tQ$$3L0-^2+oa8nD;S)YZ~y(y7PvA2Hg?l*Qc2tium3W!bGNlj zr}ixmB?w+Nb>?V@M#%6L&_l{8pynH_5^IJr^TeAVT8waZ1C#z+)lu5Y1j-xA5@!5pk~ zKNAl`p4}^3D%}gpD2Epq-KZ17B)ziVHfjOCbFH%?lGpy2qElx2KhFf?_eDfT@~na^ zS1pNL4ZIdZo*#u2c=eyQ#x$})VVgFG`Af%CE~tudw!cedF`dZV(F|2qs_i6xdJ~r{vpL^W)@fmo@u0{3~5?@H=ui=&`VvQkraI05SD0) zl5_%%F}A04LE}fJUgcapkCeop-0UQi6eGi1funGpa{d^jUvKdF&?`KFHK4dYaII5X0cBP znU1scw$i1sxr0pSm}&9Y$w8*o{WBpI5~sALWuN6Mtwqqpv5P}Yp>q4G``hF`$Fj5< zQ2Vc!XyR;QOUux0J|6Jor$maD|2l1#`aRv4coT2D<9f;SZInnW&q-|IFw=dA%Wh!M zFr3Qf)1lC(E#4I4(*0h?Z{@qok_OH(%R?eAz@K`>&R{^4@J-sY?=9NEBWu|L&Wbn< zqlAEWFhK+FY(nh|8`j23is#l3RM~;JWnp3A!m32x=atIk*v=L{b|fgS0c*7BF=n5k za#Dcs!HyN8fbh0*<>n|8*)L5^K~L_a_r<`t#* zZb_t_tTNHs(n)vxjnc-Ku%;Ccq!T&;%nv4a2MwsH+F1MC##dy@D?;T(_5NEqg0O^8 zz&F`7puD+%l9BxB({?e?jM+gs2(FG_#xVU2`oKox;^HOJ^FcKaemX!*p}3E9=ZV$U zoc`FgV7RtOj@`G3u4wn4Sh~U>1^5R0$v9;;Z~%$PYRe zK`**Qs0p3{Y3L_qSW00BRLoZyt)L`CdNOS>c%5ptr>a6#tfK5*6d^>deP6eWwXhJ} zO*fj>WIf!Kp&>QKqZ@k}4?8&U?MlT(rPde3e4h%ui3WJY-6O4Y7mNwjewF`4_!fRx z>Ht|QxAfU+f{G#I?UFA*_76d~ek-cNXiM_4W$M*%>V(dE5?nw4MEiG>4P_ziGk z(7^W?a5H3%_u{BFrtu~|-2BhHY`P-YU|JdF5r@8Xz|XBE_F&lc2>NK)YifUjs zZPx^%7gy}-qU(k?w3g(gdB8zogk}0_?)Euo`4SL=(}!_$6|{5NI$DB~{zDe#HHY6! zOnr6|3b^gp6hLrp`NE%GHCjxk-VSSzI=2t5aZ1flGL@}I4vhw6HFRUICj>r*k{xBN zJ>EVtbwGq;dpzfS>&YE=s;iqFJ?bBYFJN#WUw2UQamAUPv|34NuMI~BHVov0(UGUt z;^j|3O=F7x5w{K&+=aVjzLR$vji2_(eQ{OM&O{>RiR;?+NNO4~8;fJ;I*fgaUOZQA^6OPHs-uuews^XP`q+}=OhPC_0@#T|yj z3uzPugu%3ud61MsnaRK?CB_n1iRc$gwcI8SduzGup4o6b#I!hBneqZ)csj}4*Z=^l z6HA~D^cm_y3?3r|EW9{czv4$%tjpq$6p){5r{~xC4LzIVP(G{VuwpSSNA5VY3x&>Y zJX3$kfLJ!J!t6l$$B-UFPLr&30smkTn10QrU|2h8^`lkgBq|tUn(ET7PC3 z3}PA33!@vBKCk;10n{hoX{x~3AzKRcacr6yW{EyHiQF(IvE>mPKSyU&ne=vxf}b`H zd-)weiEEr@#7V)DxNb#KQqFokK*jj{e^|$iJLsL-<{VkyFNam3F(Du_<;2n#*>wMW zFqkURyHF$GvGi7I{kk>=T#dSH!QWpvNs4HU|;o8nb>fhHA%6JoGte(KcH#*%UJJ8VdP%9X|!BEWwj=2|8*Z{ zoH#TO{ggf1xAg9TAWU)q=)~P7a_J{DDZTehB2`Va`Qzc5T4w*YRM$)oiKkK)&}Uie zE}xgOqCdI9GQ>b}W+8t7{a!rxOBn^-GehxhpAcj*bb6rBZk>vFGwA-smzF|!osJSm zTv1;6wH{rx_9;0UwEGsWm#w|q5o?eMf%IEJCLEUFg{}c~5({x|SQ>&!Z?#ag?i|S2 z0jNq@e?A?8fAQ?>ng$MZPlYywHXrI&O}mDvIy5hra@}(au)P@;{9u$m^9HCA8ibp& z8>gd#v!nj94S0Ys&%bN~{cSFA8x9Kn93q>TN$`?7L#@L)EkyH+L+}c8xQ*rTJAKSv zBu01HlpPqZ*r$4!D*Eq$sZk(SNrm4kERPrrcMJ0tOd$!oV2BFE`oU|XdyOF&OIH}& z-!4G91PyW`=Vqw=Jyt{g6-)RoAR2gAcBFLabe{?6PsRGsn2s5OQei&cu~r7+%DP*9vY1uA~y4*dkp!XV6CF!w!O0Gmge1IYK2 zqHPy9hmE(9nmriU)k>`kKzayu>{*8XqZNo7)6X~P4#By??6Xa}w+fN$-IH|`T|jHM zu5wYnPWcZrdji?SZ|`(I9OkegVIPVxYqlb(;jp|p#yH0)%S05qc7;2-Xi|BtKxZQE z5yiKDj^Dq@#=gvy8%$LFt*OF}Ya)?*cVV;j7&ATNl zY>yp^9y(mT@8(rm>Q}XQ`vrmY>t=XZ;XG>Zg>8>i(ImKLd2r$8%K7}>>1drf>QlqN zRa5ItRmW8|w?kt9Y9pH@+_YAm@DMS_Y?yrYzD`D=YT7tbK_3{f=_u%e%rkB~0}inO zzgj{`Y)JU`o4wVbIGgU)q$0Ve(GCyYtH!G-(dTG_LZ%4|;yb{|r$UEp)In`4eZR&X z34flM1aIRGLmGbxyjhW{3vP=6Zrfm)o;p9M9fDuT|0FkC(jQwvEm|&_DjnWyXrF3e z>NfWfG=jmWg)U=xCz%dH*HGwA`W00D0OkFcA2%iBI#BhDYZcHJI4Y8ZTvy&#F|s%v z34r~!w@h$m7pLp^HK4;6P`HH!m0jtYz_fSrRi#j>C(`Q74#%PO`fP$QaSXYK8O%Uv zH!NbU<#H-LtHHAZsfl?u(02|=lv{`D`bn203e9?)LOcH$KPFQIL+~s9C;#?fz;Y9e z58*<3(0_)W`i0ggyB!m_ChV~j^tU;5cD(TE)g*XGL=Nm(K5USE-Z5WKlW^{H`I9#4 zeD05Lf|TArVdfeW(`_;y;h;jTImROy-BboVP zvDKO@I|_1MTzU%AG zd^1z-I2U31s>vBJD6Opo}v(qSX4^_t{IS|ce&W)XN=_{2; z8SnUNgql9RK0JD~O;YrM@$iBp^b7Fhxs<-V*L4K=jJ1=$&~Yrp7@w(E&y(*EV}xW) zI&3PdR(;rPy3NiQ7m1KTZ6L;1V-$!ezLp!Ap7Pk#DI5=4sZ-_ND8h2hpfG-%1KC?H zyWxJB?}Ma>5h62MVK!Jmr?UH_GTp=R(6vzf!r={idxhYO52+K4?e@s+jm*rYO#2Q_ zQ!6IxUdZuU)9}`N4w1a#1wkZ0-ULHW^1p)2Y1HYUj8adWqLOfJ7g0A8KaQ(KbzIBRleEJfUp9OQ01@ zcmo=2IfeugG%#(M9HQ6c-VcUIMx{QGj=r*t^q=#`%YF{%UC2-K569oEn1Vp;b8dRg zM7Lr){G{v2ormW^Zw03$iE{ApycUzCiz04Y)F>-aI(d~&Fo%BZ#akghhfVedx>0R4%m(Zh#Srk(Ie8x3Sj4j zL-4Tir`3igU!{3p06E-*rTFr^2+|HNKjMHo!+kxsQR0^M?#atN8^bQYXTXpYOw=tk za0baB@8eFr&B)EIg10+c;7Dp`eC)IwQBDy|3SY20)495;$jJw5$0n%<>umT|$FdT8 zJ^RZ5uvH>yZjjP3^VxL&_SgB%Z|5bju5>0re%RK#4|bS{lq`SP2%cI6NCr8Mz}{fZ zi~BOSV@Y(T(7i{DZ2?>*WkA0W=4p=AU0^!R0{8D@0~eUC@c8v|x7B^HGl_Ci+{Y^Z zsF=Z?+uywg!)>u63ru_*y7&CY2C@>j#!8B}&=yJG?O$TK7nx4;jwh2u4Z%Rs!h$9n zQnc21*mad17Ftn~QgQnP)^U+Z5mH+EW_}*&oNpHq(Cj(JA7nduVN7Men5-r$)9}vf zN^2On!z6|S0H3w5fd0aGP*Kp+qM;0d(u|#1;Jzx&66a@Vz@;|AMN1Lppf5`l z*G?`g$e{Qn3|})8>^MEI-ple;2M*{ma+)q;p2Y&HE215m73WXDC+=~p&q}}HG3DX!!>J$RV=bzE?Tte$N`itdszc~sGC1*)q z^5rQAY1^uMR#G+uMFovZ;w{>Ddfl59)q*9XRN%4)c%$2X_Dz%p4R7x6is+`Q4#C~9 z7I7SX2$VL?ixWA(`(^{VpX&vZ+m9kSIG!OaPVKRtcwU-p^VhWC0({~5E> z4m+~`bTAYHvQ4#p7k+#Ln*!U?#8|o23aKenhO#Y*!*0;CocJ)-p!&MO6|*J)ugMo zwUI(IAzJ zNx+m1S$D!K!);6<`&0n9viI%}S{IOF($n4Zf^m2G80G_g4;TQ?(QH3$0jXzJpdO%79 zNNpAn9D=~&5@x|O_7S!i40sDr09JlR)iri3{N&D9_*WaHpLGkb+BYP z`{@EG+*loSSu7p@#s>pncXz@--gbq5asNH^AC>~bvxAIoLzTZifK`M6U4d_bpza5@ zlTYDeLeLnx1n++7itGMs3{Vk#V^lFX=oJ`7!2P{%iUP}!7Bf;Bh;pp)1CMW+Tn@-hNI*ooN; zHRAcG+CRn%%N>JSD8Ie%3eb%<6g6=9_B8nq>N%sLA1KAvGGm@fP;>cU-9;=(7u zBFY5j|flIooi<#w1y^>>(mBQ=kM;N zou{Rb)9=oWPqkVZC(~wDcrW;8EGNvoEa=bhskj&8>b&n;{+LC_8?@E=^6d#Q3q5wB zsHO!d|B)OvpY;%eq2;vsW{>xSxm_%sC5)0!jMgN z4g7D=Gx_oczm{cAU08h2Rdw#|HLMRavkcT^M?UffEo1%i_%k6kWYCJTdbIqXG7+ho zYtT~kw)6ny3*nv2V9A768@mZ3csRSV{8EE+1a_7|`i`rd0+6w$uvY1r3ZLsT~ zMUU-F&v>7)J1gPqZlK^>j*JC!9gfBCL+`5ATa!KPp~Y2V$1 zSHT1i#;?^n5Cu0ZU#i}f96`IM5LsCGjmz3@u$flrN_WNZBpauR<$an7#(Fa|^FnuD zJmWcwaQt7pv1$5eH*83dsBu|Vd5BEb<*Uc0?*?$p{jEn`9|A%%Hc!c~!e2>32;zo2 z?n>DJCcI!D(XiQdN;;2FRDMDg!vtO}ass@1^9WU-Wd=ThamS@AaSR%A5##e4j4pXE4DI=A2C0q&2vUM zcPA0`9rN0wd9_4VmpC_6HbQ$TmyF%c!YpFKE+xM_@rGOXekX^>iDHBm)#s4j61W)k zXVnWFD{gkJx$sQTn1x08)h^Qux)vB+Ew@ANBWzZzM7!sLq?2KnsLRToF^<7_aAh5? zBwuGiVd&9vMG5v13$qx^j~pJ$@hCX-&G5Goy8b8dcqa#}62NHmp3`$6tLB3m1^W@NNV+2vck@>A1y zu2DUibbj2uwSO{{PI$^sdJ3c>u;nMY)&2PbR(%_@9zv>OmBvdd7tR-MDyks z64!epu$kMKPeIQlk)#8wsOY^23*!gv!}?C_$UAH;M9%1C+ETZ`&@#R6h&$DEU2Np# zSu6IL$@4D3MRerZ$tGvhs+26H+4trAqo_2kE43DR1JZeP}pcPVniOOX}u2kzawnl z@)x^&!r73IW2b=EMAv~@U)Hh03~Y}e>ByJ{tKQXsJL?q(_(coWY0~7CG4=lN#WnwR z4#NY=q2?bNS3RqHAnzG&RKV=2FY3APd_C$3*Y&qMbIiGs*y}!yI!7yK3*Ux|KG8h- zI(BWJ6+3c&UvbXPL-&@iC3V{q=a#H}RU&MqH2qe(n#<0QWY812qw2EmzRU)9jiU^3 zF-l3dleGv6707NfMW1(8Tup-$iXCKQO+{!qsM|NT7wVf#L48OM()fTPX{wk?c%Ug= z;oioX#1_Syd~|W4y84LU?@Af!{__%PP0g}FaoMmBW+hW3Lh#4(b`pBCkY#Vih8MV+ zB{^Bz+p!1iZm%>D9%p~P_tTq)*UbR;nRo3yjB*cORAEy>@22A=s@yxgbSukiU`T$v2Wc$+N~tN|!EEE#a^lz? z7UD3=<^ab=Fb{-rBlB)xFozL3T$i?NgmX`o|U$8?=^jw5bs6lq{B1go{5|@1=uoq z(Ap&xt{G^$Sud_#S8p!`N zc6d1}*IM1$&)+L7QWUR1Fs#hG*L_sxvy!LTwV1UmS51QO(Vz?dw6k3NpKmMIxl2Y{ zoJdURtkZn2a0xU%u64wzr5GnBx62bfKw}kxzhWkq)h1~+MWo7aVJj`n8}v^kADPL) zCUCjWep9c$Fi#AB#!pH(yPF~B2dyxP9(BdCDtF{mFl9d-`VB_Tuix!|*yGu;%4)D0 z0N2Sea^|3^{$KqTn<48)bSVG0Q`QtxA=sq#=x@B8!e%!~5<3%I4%jMIace+(b zf@?BCxcQ^Yf4tKA!pbLE6^!EQ%?bJS%cP8O3nj>i?tv}_5^B-6&{c*rb`HMs|t zqD@faAAy2W{aAXi_UY2w}6xQve(!Wix(IIQ17 z6f#s+S*)Z(x1}!`Jc!YHW5k=%JqV_JC*HHa&D%9KaXn)g+sq!n)L5p!CMYjov=-rc-NMt4qRiSDeBdvBvsDwBA04NO zfunR@25lP;Iwv}J)p^p^p!Lufvuh?EL)WGP%z(y;6m`_D_M9H4edi*^L|MMYw1OZ+ zMB2AcNlim6WkQ2^_vLKSIGW@faa@Gt_E41Wl?X0f`wr}5#?1LVZ_9U=#6&*v7LTvW zjGq~I@4i4#uT9tYcVds6kI{N>WN&q+L6Y&C){ZvdJRO4}ypcvKvv{L%g}a507|E@> zBf`=dfqZ$^Me33PxN38{y4rF&u-=A(M{>Kbth~{wxfyg6;XZp!y()#??(-%6-ItVb zWq|aC$ON5pIl!RVR|8SFUAdC$F=YoG^2B9)1ZcQ2`tlK{vwqhJiFC9819^&GlA8V9h&TuP%S%@xEZ^2-)zQAn z6XkxD6<;YjYobjy0XNo*i@XyXUsi~zreaS0c90Zk8lc{FwS32nwuI=lIbLTM0+55n z`mrF0c#d>425pU=FK30Y)y+Za&t~lmSWYU1sRKsm*pAY zJQ_HY*>auQGY+~3|D$6joHUhaPD|Yb7RKQ70r)&jaL3?_WBRR~K2cd-a|P%vD1kO& zhG1__g@kqHfP&-3WDTku_{K|^RDRO-Fnr>9&o7o>MnR@%*`d7%)W`w}a9{m+>Y2=k z)TAP0{bTLhCV`Y3Yp0nfE`DmU{QKfJ^LU2Z{Abk>wtqC}D{z62DOe?W)3jP}U3G7E zp}oo%p(L<3qQ{(&8r--mKuWnLa)RD_&zn7R_gf=D5Hw&-^j@@U>RAj2+`he>mb7Pt zOew^xG;5OMi+g{IA zuJ&7jOah!~!yLE`z{cQjKt_&@%WmudD2hBV(&@h^9u8SNO?aUdXc~`Qtpj4+thinj zM84qE_}S*x{<~_o0<*yfv=u(QvDDTLtq~eh9vgb~BC`uC_Amr=!@P02z*Z;B6GW0Q zIbbzmplWc-H+~nmdI1hXQeKOk7>rbp(l|O!IYR_3B<}p_FEWmox^=(H#w{0-V?o*k zr(A(8?183(+|D8q)r$B0+5e>Akv3n1a^1{xA$wi+oZG#{KztVAk$ccD9xp+18*utc ze|fC1>yJC*XKoKSHU;uKkU1bvFq+Tn{Uk@IR~jOUeBFkpKDW;ijYfHqus0Hqv2=Gw zN5Nxl?O=TH9DM7;t_|0|krX*^V)irnanJ_r!`uby=q{q%sapR75TYchzDFC4AX7fb zW;&z9u?o!Mpqe27@)PiU5Jx&=rS+A5J{GW@n^;8&gO4q_H<7MZbDVFn=3nQy$e1hJ z^w7a-`xwdFKbr6SJc}sRVgl95O+q6t5=CfDk4%oR4c=lJBm5BfH=~^+RN)jmEYKi~ zw87{R4VX+D%XbOo!gZ855IW0)p;@E&z~u8(D^pt&DR&#K{tkU;he#hn{&EM%w9QWB z-#WjB>B>vr>HTS>Q6>t3T%Lpqtl4D=fi{5rU4G6W(*nuq-)R%rM!{LG6}9V->pyjDqW$5|TgDH2e7>Y=aN^IPbN`S?6cJ#@*!sM<|wDOf`Hiz1^<+ zlwK0+X0XHzkDdVkS$m8)OztkEz?cQtp53=t@TpOd9LO(^)W>TjR)^q!E`%hQyRR0`CfRWyWFep;)T zl=cUpgKFJfDC)QHfV=EDgTvC{-feGrxlV;PD9m@-*vx}!!a-ogdWS6ieu~=wH(5E) zO}3n-bbRTVuIvv_KVH-TgTveYGQ>?*0~4|#c%XamjU-@+FsUITv6xQLi3Dwop4NCs zq5IXf(v^>LYSNw+3*L6yo%u+t&8>f@9fxgS03&b&PS@iZBc&mP5J`7IAQ=z9Tn@ex zl;RsgJLA`_VvnHEXY67*4~RUHnOB-8gAG`K$QZ?`!Z;&~)gk>g+XmN}0WsU&7h5NO|MLrnR8jtqDb`r*-tvDmHs~T5+Qg&@7CYp1HJ7be?>Ax zQp64646X?UNWe(Vb4>zHK5!Z8O z9P|a`9?wm9b?#8xCRnDgZa+Mg41%npp~oH9Z_=buEy+}!rZ>(t8OE8RFWx3CkmHOl zIDgL(8u9F(r^GeBJX4kMVXiRlRKV11oE(}$PMA&M1aFF2+XuXbhbkBlRW)#o8L`O@ zP}32^E3Nf6zhu?qQ=Z?&gT0GjKFK2iMw%L$TK54V^-TG;kLdCF9fWUikoLKG2pfQ4 z=7-=*Z~zU+l$I(Jv0OKt2Qj8D%MuilJ24Dx|wv`)M>%L&`TAcKA&E~Il}aIt!*Yg;dqc!%2K%;l6l>y1GAsvxGiM1nn*im4f$^ z5ug$YtWXPVwqRoou2llJe+|W_H5|qc9S#Ds7EjJ=9PW4!L6Gbl-$XFM#)d&ccB4JQ z++BL@E|{)BI5+Z7Hoe|4Y5llC2ut;8mnMXJH!r^2aiv2W^e8lF37PuP@UumZB*np@ zqK$fFF#b#!{wM_bIpVVW?sYu$Tb){mR5JSaHy_^|?gK(T&DbTd+?>b{x6u0-7P$V% z_YZUMEghh)2D}S{qamCwusei(OMK@;H6+MjQ_-7{)xogNr66Rvxv)r~+a+-r+f6%0 zn$RGaN0@^qB}mVr{ri(nH`(_vz6m=CZFS&1PP_z(VU*?Z+AMC!M`}BKz{Cj4@l{g! zyod<7XSzfBsV1!%lw>^0s79Ak-Nd-e_Pf&{O=1J19AUCYQeZ%7zu=)a0mt4<_#qi z>d30eQUFnT#snB4mWQ9U0VbzXQRwShReQvXp2UJ%xxxC z2E@5MV4LnLnqgAu-C9w*v$pc(LV&54Ft5?5OtHe-3$xiVi@(&Q;oNegqin$TDns-( ztlB?^VFF+_Bi0EwU}#(zSOVNe*X+a92>t5DeLQDxOSI@{W1flkeftRQfl-Kr zJrkS4<Y5S2zI7!tm#nE||^^B<}vp%}wPi4hd_K6YTgPTYo7%@UpvxXHLLc zpM}hh?B|+l#$q2@QUre8SD)m5ORc1L`wSL2%xQ5$`q8bKOq>K%dwX-ET%lAz;ZG(d+m}HDVj^Lq-k&npz z=Wz4tEkJfTE$BTJCvycrI}EJ${iT&!(8g4u>f%>^4(2P{Wi!jLgtu zLoQJV`TAo*e`M^Id|1D)5?bfc0jdML9oR%Ku-u=yGI;o8P_R7NY~rKY;exMl1zWz5 zZ6k=X=P#P6<5lSEMG?n_}m;$NO07NUk-S6azW zv*(+w~Rjf zB6njSJ4*ZTg;-D!Z*-*ApPr0@CsNcf-}%jk*fx~RimC$M5$4&%Q&o6|Fv(MOWWZk= zBd3KqI*qgzohjl&u)6hzBhr>uf0qt}wx^>W>TIvFZ zd+v8;gl1%XtlNeEJ?9oG`4D}3N~q#P`B>`0e3L9az}++>Jm@jFAM6n*)@7<>Q#I=M zL10Z-a6loE!2q@`O+3%g2Rr7UUBYN?tu`tHs1#=4yK|e0) z{flvITM!(7-?!)~OtQa-F_xA)NN%5myuT1E@1X#iw7dD`lg^18!20*UJ=m_j-JMR_ zsUn5aK2kIOSF`bG&|tuS?J0WD;ulXNpurad0aCm$xULZeo-ZE!UfX&xQT9>!deghr z4nPL{t4{C!ApZZT{ftuM_O}}9>C8&awtFz#esq*(6(=4R znC_>1L7HC7kO5c({)UFA%Bo9mfC%_RBm|J_1XAb@PdXXwtpZXGsDMsqiIAJt-qQty z@atwk48#F)uG|JQ4z|`{8zxVMo~qvQr-@VRPOD%Ni2?rKv|Yccv2t8)>s~KE0je&! z9m(b+8HwvT$JS5NKDQWE@Fih6ufy9>0|n84Z-*g~ppy!v{Zt5EeyhCeF-DxYA+=o( zSrg74hC04@Jo=&?ZIa%w)RB3e&%Kf7`LkMQm;PJ(rpvjOkMH5I)a9^{CvuhV>kr5B zW?7@l4!wWMIJW0sK*kcNM<};C46bf;7qnIfv@&|1Kf|iVzA8P{|k2K&hD% zKjiZLKQA;$4%8_AgEt8@jTU;E%G$k;*fx1j;K=$A$QA!|(0=w4fO&%V*;t=PHrTjwQwjbz=xA}xO~N39Vk;u@5(W(D4RA)vN!crt{fZ_EIQ z#PWxNWoW{8|59Fk6)IKIMmE`1TM;C)c--wS{eBk8mGS>Ab@03yhj-R@1^Q$qn(P*? zeCpz;c40zcxYCJR{#Al*REL>Vv;|-Ba2nvjghxkYtL;F@NLHA=^b;=tUo-ypMR+S> z5R)V8*VbuuYr#6f(04Rb!8Ji2JxltZNB=ADK$=2^4RF;s-R=_f&$9~s7WXi(XQHgE z#bt%n&9Q+`-+yX*54aTDs{|^M-06sFvEnh4eUH>9s&}0SY<1DG9jUE453Wn0WV6$w zmB3iYNp-$stdN5=1eibBrCosqAOrBgs_nIX2YJGt7H^g;@qYH<*h)?&8e^BE2fhXN z&vV%^l}exqwdhL2YZ&uH9O6zlD=TZaOpU3GbT_z_@VJeWkDPb)9Yk3Qu+}p9=eV<` zr&~j|N7m+(1r#Pqy`W>C;l-x=XJ6IT1d-Z?87uAD`nDK+ez_`d6i-e(_6-3 z1JMy$s=M7~m}+=>&rUGO;^oxs*><%tPpv6P(aa{Mt-a-_fkypZG{p;3qRXi>4%D@Q)8#br#v%63wVdUM_O_# zG&k-xHePX1-w)3RK|$D}>@EZ2PIiEaz^)))+Xz=w{GFxb2EF1zo+#xY_qDIgMQmiP zIiNl$V7JQfT%9#5raLEZqItR)h|sbTfUV-@GltuSU)6Re?<1eN zNua*Z2=?mI*4TNVMvYAA$eqp0AS5P9P1$2H&MqA%U1d7+J2Gvw<@X%F^ai5ld*GiX zyllx_5SEvlo1a{iXqWJ%C;Y0RUwz-<-hE3P72(U!GW?Kdh-2?UjRU%NfTzy+9v0&0isqCZ|pcW`toatzu%t zp7fd1JjN9oqq-*M1>C|6(Xi=ODnUVg-0P3R5Hi%}Q%M^TK1PUkmlP91GB)1u$^=;B z^m5ZNxYK7=Cd*D5N^^IYeVDBRcym}nx`Wj2aiT7(bu9SHm@{r$Yjfs#Wl1Z_9*jHa z4pVvU^Vv||moG#)2#)WPs|P~+BgR8WZEEC`88a-w3B9SJZ*J2q2x8596db<#o?qBY z!j&Ocn*4p7l9NU)g~|jXY?_RGLeIK>I|LwssppQFGXWY!KFf=q1Et&0*Z`h#AFK`_ zakjNuXp!EZTA?fVX{lBh_xq~S$7()GaXrahL|!Bfp=~zqj5vZ;xS)R6I+UvqTk8Vb zx2M48Wk4hdK8QZ;vdbRFQ%U7N2jChj=u; z$SLQt$~WI0wOKxSihxlw0LL?F4s5cHs&H&piIN+TU6Enuy#uJOtV;0r7q(=E z-@8`-oR(~xMtnq5kq;)BMYASBsyNmNwkao=wyX^ZP57&drdQv9HSZ)P&1!d)u57lQ zDz0?WUgMtE%A}`cG!~t>So1`649}&XTy7|q^}I|<()=!|i{jTVD#$4A&j13FD@m9u<=GfBzI+b)}&^ORml(FLwZ`XhN z^_+0A!?G5!L$lDd;CJhyRay#cEM8sMp&`H138wEWOs5-7n`$?iR+vUu-Vui$uhzD; ziyjTdePT%SY)Q6kN_J?EG{_M6dfBTS7seL|2+^`q7pjTmU6U#|b*7bETwu+J-o}zaA&T?Q6x(+)F2yrtH)iDSN!Du5 z^-bV@6s9aY%|C_8u>PytfaP~$#x_j{np?GPnr+@ROB?ciy%6u4*ID%I5fH&=N5s7K zHkihz)GI-+2@oJdzZsjUZWYI4Fe&(X;U1h_5L=+`S~*o< z7Gh^o1O<*l9?0cO3-9RiZHw;Gr6mYRoDCE?^=)D2OPUWJU-f{56fbhplHr}WLlh!w-% zS`Ha@cPbT2+e};Gx?B{>7ENKEziqN!^M#NM6m(q&C@hLwbzH`RMb6cSRz1W+(iPPH zXjo^G;(6&UQaLH!OK^+i_ajJ_tC;{hZu5HdoJUQ2b|C%>lua-p=6jmJp+#l2Hs@3s zayQ&a`^MGk>V~W)HV~H-sN)8ja0K>1{)aD0)yc!(Mk!&cJIK#u@ABb1eYV=C^~P6Z zH0m@qCy>>TqmY9SzUf=ZNAPa1u4viviNl;cf=O+qF2IiKP|MS5sO5>|=*Ux;&Qe59 zUhWHfpQ2l|zRTLUJ2C*a_LB!Nv~OBuhKnlw0Kh>w>L3(_;>HcG5GUJ8UDr*M%rPzX zGU3K_`CJH?C81dDxjRSU^rujj;P6IKM=g<4s8{J0Z;~ZIZTO#34%#R zrk1hric?&e;+4@z%R=>B9)ZaqnK2AF&nV!_UYQ$l=$8v1Y$ysu8YYL34$Aa?^lo08 z$pMjC1Qje-ltpu=X?f8=cG~$Nmh^)sWkZ@r_%MXX!liRuW5ss6&+b%=sT9dMer-AO zT7!*Lh|9%D+qAiN%{A9iB!V6L-erM9D#VH+VU)D!Z!KHNfrc39Oc?`3y()CT0MYiu z)3T2m;tfv2;dEsha0vu;BT+|o){-Nli|)=CTD%OaybN&NO-$Ya{@pdqfEb-c zfJ}^{7;#SRXCKVBMHg}kl>V~VNVKm_-gN6m>ZVjSjb9%X-ftq!(&?VH0Ru+H&^C)# z`2#O53e^h;4_Eikn$ZlPsqFDXRMHlLND^&MD8{jB{cJ;ehklBjXsmz{w;vyeDBIJE z0i)UjNpA6tv{+5LtQhq^_I>bv05n~8_8<>B4@6s_Mh8&-Xt;Mhf8mo;dRug(XJ3lo zVixf2Qs?5I(?s%zLKAnD{_}vfY@Zm`AFfdg>6k{E;MZ*)21iQjSxG`ETK<`vSj$ou zuE90n2RMM22i6LL2XX`iwR>PYgsl4ZPXmtu--iTU1n6Q!6rEee_g1|GnD1~r9>R2) zH54N77|Knzbx0{Ug-$n9Q4qwBVHTlWa9?T}(yV#ecjjg<8M75q4LBShwu{qWQ{T5Y z>QD@;^&LIV4!}BU*WWiOHts^P4uvkS>SWek;z0FFT_E7r@gAdwt$4imXUA-b!8#6m z$NVcbE+!D2o&&n=?Z0Z-?n~`(`_?3{Ts<8mbu}2e57^axI~4Dr{WE-(3B!>7pRqGw z8v*D67=&gdYyk;cXDLOljJD^_Gk#}MoMY2iscUk%F95i8CRrx!%Vn2#V^bEciR52g z;1{`@G9><2nt$p(a;jFEH*1+tc52x@ng~($5c6)}cdo5}ON0dsdDNR){%4^v4E+19 z4D;LkM`RjhnJgk9NpdX%Uv`Brwi78Fqkogfpv4l(odvSXf2x(TX0{bASW zb%(gdM_C)-Tm1&HtfqDEOa$I<{PFbd%Agz<9Vu>kB3x4_&b+3{ixip6Z$4NT-scq|5Rzv6Vx^5D7% zWy1#zE^pxkJs{bkjOV~J4E4gekCeB9^+R(Rs3f1l4JtFC{p?J7l5l7xd7WIP(eZx> zExLT=iSa5zPjX4%Q1f7+my6r_KN zVhJdTbM-2c$ve?uYFjNvVGN)DlQr9>#6!IG8fq4GJHQ2}@(^SS*} zf{W)X4xiB2kzR&3gR@WX`B~ z(X-ziPyZ6KRobon$RqY_Ay40>pTEnepmocLGN{dYPHfZWmQO#JviiPj!LQu9UF8KtHNLVTLT91NXEsPK{H#0hT(PS+oEsI zj(G`&`THg4@q^zWsX-v0*xT3LkWfZFMdFJA$ir%M+qw(pq84Gat6Y zdIM>$_J8wnf98QkvP?I2KO(XpVcw76@+4NqH5}!%GU&s#w&cW_d$9$3+ns9jVW3bT zwlv@HB9AaqZ&65g z3bV@HC&2@}$>_!1LrdxgLkm=l)5yb`vE4^n#$Fr@6)#A_49p6zj_Bhb$uhPGDg{R5 z#S7zgWu(;p4+U8JEjyh_NRMld`F7j{ZkE=_Rk zIuAq_m9jJ`TdCRE7g|>)PhG0Ow@vupv?%QAjh!MiG)w*-4to3pSa1)(@ZXxkIPuEr zvRry9q0kN%{P1PQb^s$~2PKNXIZj$=BO!+2T9-Muw(SUK%T32`y{SuOAuBlY6(E#DWdIaksOZyKWxb=Z>8j`$F%S$7Rd+~EFuZ=aLc{n8WIR04 z(@DnVbGpM9f;Qz*pU=@;O(^_G3+rvjMTxEG-&}k$Y<#iZXIfnz7XwjCUg4*p7b-w1 zOM2KU;rr2jv2C~)7{bpp8asWaZyMdLMygYcjr%T8t1lrLPGt3gvXW{#5OPq*5Yi0j zf-z{%|2_a66hpeqPyP%V_0hncgvXe{|KS80y8?-CEPhWw)5#CS^-T`l(GMnfo zzp_x*{sp3CQ{=1|ao*CsJuIVf!+^?{>1zv0VTAUXj8n2bEiNClSP!JvElfW7G*M+_YpMeZxQS|2Va|hhRRo0GzHN)-J zu}3#Z!y1_!NVr*c;seb5;hCEzmljo8?}@xgA*vo_KC!-| z6LBEkIm#@D#G$Ok6mdYMmf120+xt3?Hy0KbE)1oemyqvhl_sBwQGQ6be z3freCjtj?qI_!ClY)x2H)qBbgX?yh0&P7HLMO|kHP(K;i8^vs{5}_U zghHAN94dyJ3}05^c`|zY!Eb}J2KdK3(N0`dW8z=OfQaWQScpHZpVGRw^&zkPLKK*_I4odj8 z(d%wM)CQThNRz=FK&_R5rRx@-*T-gkcN%h<@4?N-&E z+uL#Bm#|!Nl&hA_gx;^2a6Kx(f6gm^3zp22e=L#dFXDi($Xe zN$xbHNvd8NY1zP<^uu6)&7b&Lo0*$o-~b^3wPd^y71RzW!YZg85X?>0pI*|^h6|f2 zsM04hGWb7iDSR1s)va2bIQ4N)Bx-xXn1S^W6eRXuc|(ieP~8Lt(`@K(95^GTW>pGC zf=KObC%TTRtHr+F^cP#Q-dIjpgfOO3lq}%att0=c7ipND8`#pV)BL7|&{7ea)FA~) z$uu?v2j$A?yn5fW0I_Bi&V|SmE|@NiK@Uk&s568UfE}Z~Qsfs>tg}0d@OB{zEiGtB zLbphHjNxKXdZr+Yn~R|{2SnXE_P=+?S~QDplz%78&e#U5+IWM^)}eyiSA&RS$Dr5= zKtOpkC%OhJ1L+rF)&qtnr%`Y2LSTUJiP$5l*1HH>xG_LS#c^YlSxtbgOqL`scqRs? zPFYzhcQMLqxopa*Q{rZP71SKD)z3touw^y_LhsFr!me`D-7Y7|(m0@{ToVhsWx1(n0QIpR zyXin5L{nCCeuPDJ;vPJ|hS%rU+{JY@!|X)Q6U;)Zd|DCm=Tm5xX^f~$Z>UHC#ZT~l zLV)gAlu~+K&GfJUhVJ7MPU_>rL`7gjPPQ9{kWQVn; z`p_z2ZCJlr{dp@vu^d18kB@d`J!tTvV`g$q=^y+Cj$Ejk1xo*+li0xKxP0Q#QOVu(MVfS@*c^Px(& zNU36?>8J}X9N7w|JVA#^U#kdMsx8#%=R44gumSP)NQ^ol)_pkd*t z774DZl9@wwk`#gPRr6Tgu9wC(d+=e!WQ(zCVzxJdLm|C4HOj`$bfGX8&T&s zH^#aWtxquPB7M(Q1jB`%*9?Sq5iW)i)tr)^5`|JzyN4m6XuV2m!l>(@weEn7|1p0I z%eZDIfLZ(-@&R0j8i4oLI4RjnDyFPdpD$(U&-xmnD0k`%5WGxVK zjBJ5x$g;tpXFMbWs+;;VB)^5^RLt{EVv3=}ZMFU)7NuQlta5!gS%Au9pM+Gt5x8uDrEINsoR3_BQ7MOGqv!i~FENZ(UAk5S9zNo2 z-TQD&D2ku{o^I{hp`H~e%Z9cOrc5ZQV(kUsx;&t5BF2i7E#FG( zw;=@;B?)yy-QBpvQCCO+5kRZG)8Bl|1aE0)=^jb4yP6|FN;eChD-0WLy>@wXR_=AS zmjr=kr66Ev=b5+y4(rGXCxT%!)Fw_96lAoD6%3yz34XC1#up8d)L-*mWdL##Qj+w}FHV04lMgd}yn2yupQ=ay;f>h?~cn-!IPI9T7YWJ3eLoe68A!N;?Tuq%9BY`b0aOzt{-ErD5;0@rrfRYErmf|s ziO*-Nb)g%@y*CaZ%M98kkt?kJ4mUqZ}b^<8W7ria-nhpi85$eAikHs?c#y0n!c>42DxT*fI`Y zI@3}7x30mppirfOKzW?A3ic`9zY79@eALCed%Y=ww!51vK_xyo*JVD9S$> zWMIOpQ$-`ddt!<7xNIVRtm)3cGt)LN_DBU5yPq z7|PXWy{^|mKx{BVWK|;QJh(6viT{regt%4g>F@jr1ahkY!oSFmbO-d;`i)pLhs_7j zP+Hf20VPLhNrKLep^q){NenUmyJ{d96a-j}kAJ`W?>K!;atxFpkSL_e%)`10+(4xp zQQn$aV8<1OO1%rbr>@X{__Y@5ORf>cnV1%cV}?+PbpC(BC z;KhipN`qY+%;t8XY(a(6*{LHn37&HXc7GE-Zy4OjWL`qQFL9S-1A}|)1M7H$ny{X0 zyI7dv-?N#h8xz*$`E5(}?3l26%lYFg^T})B*Xc7)^`Y3n1OQ{5lg=Ygy$3aI+4gE)9+~a;t?gZJW^!XU zG_zo9s2DXo+%2qw$Q|d{>5_R2uhe&qm+7?He0#|>2iqCkQRqYA4NM}_eu7ys1=#mE zUd-6_mTk2~EAxe%>-n;p9J7>ujP1@5!bK}PQpCE>$aS7_zWL$Hokx`=>}Ux{xhY(B zEd6&@uKQgX#i4Vr9;rg_l3)&npIQ8{{=7%;lKc|cF^G?c7JhmxdDtI3fu%!SnC*nk zgYWyA?mfKE$5ivW{>WI7g4=qt;p!mL&}`v8DCTnLtBJNt?L73}<=B+#d()sMnwte36sr%1vG=S8oV7=du@5Qxs z99X8z0p!%!WVj_X*rHIR$yUE!wAMgfzslelz9vK2!~HSPzJ*S7`?Pm5DBL&wp3zl; z9zL*itkP)AM8Y$!*Z}c68Ryuno~(bh@LD0sbX<39$IJ)c`E)`EH|YaQVzam=Vn`U_R96{N$#OfL93S6tg`-T3-oZmRCWXA}@K4`j{y4$31 zu=^V8eDX*u^a4U1A$mYl@PV1VD5vZJ>(jK4#MZRdj|Slwlm5}DgAWEHr_zqpyZf%_ z_x^ZhDEB1%vr&}~PzpT}Aev6!p_QExB2VNP;5W!mHC!sC{7ByW^d$&r^KK0YE$7Cx z@Pq^*+pEiW3Z68W-sD=&fIB#I$1V_QHJ;k|z9Yiqh1s(_SV#J?U0F)rhssS$3LRb- zlQ-Yj?tSjt=7#)pT#n60n9PfNY%#UC-fXezc)Q-#+f|*AV?^v)Wb+|Jf~(|(D0gL^ zueX^7w%QiP43<87CabFwb{6k6e-(bB(fHPtmN1=jd>zT2@m> z6wWry?*wX#UJ}X3(@>fv$dvkhlv%w1?!;5OzOqp#E+YhrF{x!oM~6#Vxv(Rui;jtT;QA-Iexo@GIP=S!MWnEnkgRDZ3behbYngXM zs1jwv!FpR|+&Y)Y#R^{aDj^0#D$zbqI!g1z#CSyEX36C>BBsCj=iIYF@|K zZ$49+_>t~+7&G4D%?p0*BQ4h^h83>QUv{H{p{(!H{h`4q97RIoL4 zpFzrpK?-dr{O`)0sIZx1_&7ulHlPeNct{d@D%;_4DQ;-?)`v~RsI663mEZALy?6z7 zsl@;T$*Rp8Wa){eQj{bmPrL4zhQMQi9p;`6i4{>zsf(5*=;T;b- zDYx_%O)KgA%b*YGtfw-Ld+?Wkwb_RGr@#9dl~^5=_KQH1Rek*to)iy-$-eFg4kCOW zUNg7OPLGkZH3793`_`LYOFYOXt037KYB=+=Tr!X1@~ZOJEEZq~-scOmW~G7(Czllq zqHL0_O@K5}ZkoZD)HXz>Z9<#~k9Ow>4$VpCU2!zRD~D}iM+vSbPY4}dhoWCyPjI-mMz;!pfK7(inPl@5nd zvgavhnV;`%r^?h@I@q#IkSFIh+om>Y)g~yYg6_8(Av$rI{!-5ekwc(SL;hWlHsb%^&j%_Z);lt2dcZ-p}+Kz5j)mlU}d%i*(fmFXCT*JsDJIc>GD=vHf{c00HAqn zm)*TxR@uCG>ieCo9fftu^~;`i{xt8(b!oMmz5RAAK(!;BjXn@P){JKljGUd~+^X)z zEX^oS8}7CWt@~2FKam~V{zDXsf#``iZY(awPj4iGHq;rS$K|nLb*9oFX~SQ(NNwzP zI56P9_FRAH@dyhQwKY7?kpx%#HXh94S%2Duoj$!0nyLZexY2J+LhwBFofq{yiErv0 zTkk@c{CJ4SswH*3oi&T+18YVGE9r`$Cbmyj2SrtG8UBw1mz_k(mCbhFQOvC;3d8$s z`e_p4{_e39kyG)Ygb}-WQv%vC4)k6RlH%`Y9Id4w9Jbsy-VpH6EasIJCG%r~bGde~ z)y$9Hbx#O`8^UD|ND(E($dr#u_9ptJJ*fqQHR%UWWlVT(BXVyR*>@esV=34+{umm= z1y*UhzCLgQpUZ`wEalYh_4nZrVhcltfA2q8->-woU>K%$6>Gz5i48D}VOXO;3N(Ex0fSi^Z2lzX#DQsXfNF4s)nO z-Q+%K6?Q-M`%wJnnrV*prb@UGabOH+06FK#^wuL z1lSPb*8mISP;~xTh(BEa2DKnHDBG^qSjW_CgV`u&;6Kj0J+X1*aF~jK=4H~OQt7Ut z80+}`r;Cr-L<{ApFIS!*#?2(N29d4;c0F)SiQ^wO0YNcx>h7F>E>{#p(ppx9z*|Y+ zMD+WAJU5g)7N$Nlr3K$wZ!C|ox;+Rg_BCIaEb*&@L49F+b`(ESogPFwYQkMSVy0nw zky>#Y4uCl2Yr0U(>dNybUgrY#e3)4fX(51qTq)77=WiSBwy7~~IrE`Y`-7fEsU)&1 zd%tSjn3Wt=LD?_MJEMso)X@M=qgdrhK6F+A10~~;3hSG@{fEU*JiP8&J+i-(J5C^SmcwPoSO}YCdWx3<5 z#x)W0#ffVkVKn9&gNf^-4y(LsWWE24sN&0xQPHGl!Jw1h)7ddx{GzhM1(<6l8=8g2 zn-2QF+{7%!k^%LsSV8l=SDUi}A2{1<`8yoyY6#SH-a>iM^<0=tsd!!y@fY^W{alc*5m2^!>TO{ooNI@848TeN-1u+oWi+nZr_B zK$Qa%dbmXC%(`=%B;P?;H{`C>`y<&<5Wd~Nv|aw-RKpWLX+M2u{rvQSt5CCCZ)Zk) zwJF00>vA?OgEd1ffa+2eJua)I!IGi&$|`>UbwrKS36l96jcWfgyzTju_D`i&q#=Y` zAHJMOwEDoG$n>n_QjwWuP(?Uv$)&rbc6LnRzvHspXFc~JS4U3pTBCLJj+uGX02g5- zuK#)fl+duOm;+2q`U4kY%TWt|m%sSy;H~m6tW4)r7IzV++n_9<6k!}UCSRIn)cqOd z;A{jItq_{7N*vLmaN@Co!6H3~bWs!H;QhVTnaACqMlHZv(0zp6+?knTKgsU|AP{Os z?mTWnGKy>vPu~zWx~=q-EAfZjSM`%H11A25(uZ(dX17?t(N%}WHgD_Bp2atL zzbe>!>SP)RatY#eeNJ14amIYnSM!xqwE#=FEX#=YGwUJ_t1#LxOK)Ld6S17?UsAZx z=pOyJar|iakM+c^VCD?uEmQE*?fW_lXLEfg=}2KV%c(rQYDbNvlGn;V$4vVQR)e>Tl(iZXreRrRrg=v4P&*4On9`0-dc=O6s^1(OIfKELk|EnZERl&)Nz z|L+Ud-Gd7zl$BNpb(yx%XYVE4=^kyV=F+5RWINpuW!{Bse8r=6l`(Skk#&cG?DVQ= z)5?fsp|_Sp6;k-*Kj_H*9>74LkEJw`wkfG>)5Ja?#pag1$o1BeI=TN}NakE+TmWrh zbfs-)RL9~KjyR=*SxutXub{;w5tiD2X13*7sBK!6t!v2FKlsgMAx9pJTEn8_G#BPM z14Th!ee~9LQvs;JRL;u1TUVp*$xYm8!>o>!K?M`0? z;MF$ssi&+=Oeys)RlCim&dj=?ulXRq7fvnHO%P+7gQhbvUA%KJghZ+mH2Yeeufos$ z48?OCUx+-kZSb*Ah7OaqoT;~IJBJ7jotM;otv6m)wBb-E$|9aN?msT<#i4u%JIdEM z7uan|{`hZx3sN=4;`-C$63d~hd!vXQ6T1_&pB`Q9Pot9Ep}tm<>BeBAc-C}^5te*8 zW?#P6p<7l-D1LO*Z2JpvzaI_-lQc_#!_9d&Ay6#=x|`}W23nPM&Our~+H1T&JbDnB z5GgjiourocJveU^>lY*sF^*)rX5iQ=+Q{?b%ldY{G|6Wy_0Zf5b7 zfwqn#6H`t|f~xMAPjr+4K^+%eNHk4sel=Ohf!P8oUG-QN6hb;#6pk}yraA!}C&uLO zAkr^F?yVsY?awTYR>q>s+9oj&v~B zq?$tIvW{GaMzydPuXvK9AmFv*&U5Nq9Cy-lYiM*bY|JZ8?+lGS zFKOW6`fY-%+d0E3kp<_w6s)tl)xbc(bYE#giam=%6nCa=j5hVd zNc$#?sIb&FV~(7O>RYDj%zURO6B?&H&S@ennAQP!1wK zu4ztps{Y8Z*R?r8<0K#BKN5FQvdokK{|=M^J`^BhlU9v>c1TbUBt=+9W^$7!9#024 zExrHHdoykHOhCwzml*!zRo`+;!R+H58ly8a8)a?SXkh~hDS3afY0+BL%VIJSrJ0`6 z)@|4*31&0F_ogMH@>PbFBSJ`_th3JNAy)uiCP>I^t-XkIyZgwU#s~hUKU0Qnq>yzB z6-M8P{n30$iT$bEZ^G7-%v2|TD$4my?699$^mLJ|KRoc@KFoD_S$3?KcGmN`^60u} zQ5#81beB@uQ8BCiC1ZPE+|x${oF-*7B80wmmGV2@E$`{4t{j9^3#tWmObKa zcYDRBy~t@kwyT`pz2wp{=SG2UxB0#2^!w<5=Sa7|4i%hmHdGzFX^%_@@pSFmW*MH} zTP*7Kz07(?+>$CY-&C#ArDDSVga)@ypNIV%_9v)bs7Pk13Ltr0SBtqr+HRvqOKrWMX(!p^5m73GH}Mq1 zhe`q*a12&dVg&t+1dytAi4t{k%G-sdddK8&Pcyfao|QuIEEulP#eTnEk9`*#%8l@9 z3rmxY#O>xu@v$wnj1xZmRNe2r_?VbYK)doyp6 zud%#}Q+QwJDFNTf#Bw@Sz0vy8nP=s(hV5_ zq*N9IGud|KkI0djk^>)!qh6hgIuwBXPoNg3W14C9xmauoYL68Z?gS(%wmKrb0N_ead+dVb-ucn zvJPw@$7bddx*KkBl538DmczdQk}#}h{BuyO8zv^i9Vmce;H7BonMiy7p>p%Q@KyQ)~#mYakRurJH~OP-Li~#zY*y0@OnpO zMDBrNsKxN5_{{0iJ7d^~p-Uw)@SLF~qpN)y)us!$3(U&eJx{huo6)WwV^GS}9{QG&swOHG)zyjx5toL8sDR{%ZCU zleu1!^L-6N%w_^Py0cD`h63*WaiVAWko<|qCKTkMr)xJoNlk%pQ)-*#JiRb8DwjQ1 z#p|W_lIO~RVlsP7Cvx92(%LqYJAYztV0y}!+y+vEI9py+riomcv8u*Wi)-)BPp!nB zug;*(=bdWMwzjBYkPJ2f?RSCd+wLXDzEOM@qwJZ&a4>sz|34#^<6ncfjVT&jH37?v*}Z2?yTR7t+%;4Ka3UB`!*c=t}^21(@^d*eipmeT}IF| zkIQg-o8!FKg=;}&RnkV7Qgtr!PAR%^i$~%{-pEXo70VjyrJrZwmo{#>sAfG_q`vDL zzR}9hna+aQC5q>H#J5NhJMwV*HdRLSkL3~(=7#3CXN!mXd4Q|Q5FgIl3tHh`h7+tB(zNR+a3va zCMPC1PdsbvwUH{_Z0#3UtctJj0)u+3qwX)0qT-qDmc{hvJ)aD@@`$6&w+DI}lK<9= zy7THx=Dxs;21MGnj)Oc@G5MZhJt+~PGoQS%XGZn1PON3ixz9n9Ilm$U%Bb9)BKTp-mbsjD^EYyw(lNk7;#*jo6uW-{MrKYqaIQISoGdB;n22AA^iCPq;Co1 zY?AQT3n3mag7Wn8Ixn2A_H|{8co|VSDK(?DF7Xm(kTNqRqdMZB7oYldm$HevbK8h*s8bYxlJq zGUTj^{`BT+)?0DB2`i?|^m^jF=(hGK39YXf!9s<`M{=Wl13{CUFnAstheZ~Ql2MK? z8)hbZyqyKxlsL85xlcF^;SO5NjG{c|ajM$7z?rXmGj%XzIC(K|-u243d{f}720K2z z*|GPAA{Q!Pqi{S21;%|2wx2WvyXV#*9}b>J2Dl_ux$^ivqF6ec6#*I!v6+WlXDz#a zsLa$tApPQ&GcKjqTc%Ve9u253ZXL7Oit#!7GIhC^y0GJR22z}+Ih+GLutx<8QMmUn zl@hoqGl^eXIV_j)pYpDCi~F2Ze3XClrL@tiDTxiwysZ74-;|lQmHdzhNRJ*MHl60tltPZc z&K>YKZRc|8M6|;)O-gs!q*1uQ>~WIAz?cd~WhyZo9P|f69>#pnCw?_e(d8YlZ)U}q z99mw8^4Ki7l8Bjq{x(J!%h zjuXtcGK`fKGi_aZTh+Oul`yckU5*7)hET~%Rjz+&BsX2S$bva9YPLL!XR~p*WmKdU zR;<__^wy;PR1&jUdljuOQE`jqJe!R#E7mJEep=!3q)NTW$c1Ob+K0_vye^VeYUfVG z+t+i=4mTKzoYV=Z4iAaoi7M3?ZLZMci1APuS!|tJdUz-O%=ataLGPCGRWHj-h_fJi z;6B*Hg!|GBt4)bRM-dpTs#rU-3gk+Tt@7;!( z?U?+fxQqV2TeZwIuZ&t$W=v#mhR>M4%nmQ#*Spn~(^rHUpH9nE`c_o-;B9WjN)|Vn zJm6)gbk289)cPcslbjuqA3IcyjLoI{GV{9re0FusyVUT2r3R(a;I&Cx$^sElpRdF) zzO;k)=XYHoTX(EpJ1(;+G?PbtY1pVu{vK9}xCRU|JEV91hgK!GTUTzZRT(yRo77rbEkQAEGJsNecgQR#o4rrFPp@JKE4r z8;2UnbHY_t@uSDSr;a|~cC*$nl^808JD!mfmGO7R++5(QURPy*nIzaqj(c%xUU@b! zY)fnTG2g;Z?ryl@b*<)wEWWAz^%kN~ou???q)+$?RY>Xeq;zC-=5%?k9%n|lWt8kc zvGw+dOd)rd%K7(HQCTmic!G@sl~1dI9zf#3v0?UiDcikK&%?}ir)TO62=oRfUAK&g z%{@3j)->d={d$q~&ROJgMe^UiYF~Z@nSaO%rzEmqn&2Ou7L=*vCAaFW&!7MH1LnWa zCQTOrc3N;LCg5d?O`73ee8q_4CInkX4dA;pBkfz|+&xl{^_cmRRIrrr454et?p8`T zk%TONm#=keq0o3rjfQj1&Zg@Z%4(Whyo=1-P`9G2L)#atblH*Wb#7?mlgwPl0MeF{ z2%%n@USlF^V_2{r4HqPFY*<+x^JR09lDdWNA4SaHL`E-wz#5ZThTW0DGXe8e?x-bk zqkghZxYF%6x#>dd6YhN7cUM|w^Ts7}14!9RX97yS=H=~mpQI`#FXk>(#JSiwcv0_= zy3#k0xU&s$Y`9^+>@+SgO2St<-zVMg?`;&gpE9b-k=^a*^62nuzH^UTvB8=8w5KBh zB$DUMY|^3aV4G7kkzq#g)APn7I^w*b0eD^}o+90}Q&Awshdz&V&||x!`gpx0ez!0< zWxlK!j>l!`sF&hJ3(gB9T@4`BgeavwahN~*<7HR*h#4+F=ltPt3p#7Y^t<7lFP+s* zSHRucR>tezypWme*Uv-lSMs9m#stn{ggfHR;7;vG;>|L>>^3iHdme z{eBSsap>a=^r6zl%siJh28A&6Wd zicJM0v@@sW+TJofA^gYDRIvXUg@Z>-Uql7SoD&F;`5|EAFboTjYYuvt(uP{WHTgup zRdRSd)F95HC)k>Eb6=@7(Ic{|gvF%l5#>B_$&Fd=uT-;HqO3df9=?;G7k-^6iICW4 zIqnfaO1@1LyFU14MUm*}&U_GQkxw8a{ID{jHf)rI@4V!LiJ7@3Az+B?Y8YGht}DKq-?=x@qXn3o|AP8H@SPPv7aEviou+qW%C`$iuy z+Q)O}&Eba z-(PsWe`U05^T2I4tLXliOS=uvdX^rR9p!5bt@`xoo%7aF6}68~+Ko=akCER$KfCe$ zH^Q$9dk;a1hynflrM~=pYkfYCY_}?L^bz!P@$E*3AEbClrd3tYZ7Jil0_Xh+w+j6f z(09^1yF#;2MxPLr$WN2s{^?zaXR`8CQM>&W&uniPY-KaPeJS2?cEYXNS)ge6Tzu7t z`U7;l2>MIUzaQ$+EI%W}uIr0Ye90D^`AjKiyq^?|2L4blJt_n4Lpa0z2E{C9u|PpI zQBmjVD85svYe(VESsHBi@ZC02lK4=cpDh1ZW7i%JW!nCw17*u- zW_OX%R+PpuZIThnX&CctA}iswVi?A>yJ68dL_^L=L^)&@Bg_;r>&%Rt=JZ|<`|j`k z{r>vRXU2G*x$k?P=f3afy1w7&r|g#FHiBRZoj`D zID@oSxn8z1{eqEg9iiJ$^}TQ|sQR!?f6V^Hm_2?qCbrnX&2D4E&o!*hV#|d83h1?Q zAz%a}b%Z@6>5#W^W{!#@`Q=^l3vzj3qB2oF?^Dgl((@fccIyDHA8By+*iY(bOMH%{ zm)9mmJt}ia&)y!-NGc5Ac$fa4x?ZL^fEriYn&CRECo+*&EKih-FZ)Nr_+=wff5;%Q z>;Z$*=&@~?j}a}jy53w*R9Ql%4y7aI6PcdSLmTvS7v-C= ze&d%Vjk1_03RT@^~<27uFIrutMk4bvVjdZ7i>)g%MW@# zZwZFsMqO7~BjE6!=)xf{_Bxg&sg@>54Dt zK`T{bxZCQwj!Yqa6tR<%{T0ajn3+p)ABmQ{m`8skvBk?-L^pK$1oVh;rbb;?!q*?Q zG{pAwvasnE4P0v3u{aDHWsMSmD%40;aAmj64!$8mvI%vr{Jx_Ks~*WpFSOggGJoL~ zV}(f=cEd4ncFkbEU5br%k)GTxe9|Iz+00HEha0lbZEe;lP|pe#{$NSP%fBE;d;_d*Y@xX^5#BCJ755Bizvef^hoW zhO+@~d3sl$>;_TfwUFDBTZA$F-_I)>PuSGx$EvX(R~3v?UzqpHOn)zidtWGDln;7L zrfTvul8@rbB$E&Kn*RJ#k`k+<*P938DjbRXNp9}shqd}*X+r9p)QL(35sYcR0%#F< z$MXiKGHfMrPg0c6YfbPNnyN&<&>b{>&8$G#ae^`)e7u%0UjJXuliarlU??WSEV=Zh zwb$J8T-Dj47ddQ+TMz z=4d`|p~OKz=(s-R-hOms#5lX@xqTn6Q7)_BzfRPaXyz1BI4i@GT0$}`DAZ5cDMJSS zVx@eSRKziL%tv0^ESZ?_9Jpb$sIM7cItb=AauRyj3 z32*flFirfTpE)VDohlZ$pY5pcMFQr11_}99L&MP+ntJ8?^z)fdha93f^}Wj<$ov-h zH#*>WRR3eMF+Sb>HL<1+p>YRKIbQPZeumBN3H$4=;Y?t^w4yArto~g-M>VTQ8i8sf zdXpczUg@Qw-}#TJUTz@K)S;^W9aw2(#Y`_3)!+vW)#r%mtVx-7UlY?YaI79MhFNg; zGsF1aurEM;2}0c9)=xxY$)D_${UqI&F+T?A zpH?ACKOrt|68hS0u(!$fkFK-e9j{Nu8z$-LsyFt_Ft)a$B91L$mH1s+N2bc4Y;h*0 za<7}$67~^LLIKR&{-#9R3QZfTc3oMOwQ1^+Q^({zjd7>2;r22-IP4a8L2|cK#UZ9c zYIpzRL*23wT~DElAx=N8z8)O6iEVmmto|>3HzrIq;fe>D;7@ei$b-U~iHFgJNlN)C z<>Jyq2q|nKIT{1=*U`%@Z&=2nj8kN9S9Tb{6c`dTjo!TMxra1#ODAhmhFUJPEq^~P zV{_>U252^}?9%8Yzlrha&fgy}#jygL^zwop*xkTztddA&|9qheG0i>Ud6)f~VqN~c z?;Kx*T=(2_!Qzj*FoEMG4fC1WJFxBPy|3!wRou-r<(Vh+ygR z=6?agVT1;2`Yk!u8;?|-bK7pNFH{yKV`v>8+z!OW1dHZE`Pw#AIqEuR1to4ESc$NI zSRc=ezXgWvqk(VdS{A6JX|@+r@t22w)rs@E+1|`Vj6o#)s7>m$k?pZG3zJxUAak3u z<4wU7n1%IO;@H9wfxCyG9{vh)Fn@m_rHnh8_=P-8JV+YiG%_G~dK9f?ZR(jwKA9c6 zgF`D!syn+T#|IJqmPGEpWw^Ls2@y9EP9;XMo`?&0`mKpdMeH?q@pud5k7lhC_P7$E zCufR~+xwphhGoDuFZWv5sfS*>TwJL83+gLzL2!~Z~>xjdn zfO0er1WaK;&k_iojVIt({3=v4M}+R#8)2Tj75VCMix1mG{1I%b8Q$gN65>x+CVG_? z5JvFUx)uA}WTtV>!Ot=bGkxvoWgx73Q;r*`o+JCFe3W`q6YQXGhKtga9mwsY9eShA zDO*k0xlEWyXrR>mxxJI`fk;-_pRN!_^?GZLBrt*|p8~OdaJNa{A_W!aG8^v|8ljQZ zA8GHR6*Z6+(<|Py)yr&oJ<&br%)G&Cv5BeYJQ##gl@}Fr(!Q5{A6;Aw{DgzO;FkMq zTyQ0qCZ!9dHtCXua*=+Az?Q=}`Nv)BPco3^A&gdBo{FP4&k~ngJ^P(b@zyeXkBPa1 z5l=j|0CPmJ_UbG5&2^?Vw6@4azI2JjFG$CXfm3k82X^oyazYLh1jZ^+7=yG2g2Hm#cMHjwsblK-XoeA#i zD?xVX+&N25c<4*H2j&YdSX4IgzN)qS-co{!)EE8JK4(L)I%wmi2-Y1rZcIzD`;7JT z&Jz8DEuj#1Dc{vOYw=XiVh4b0&`&uvu2ntrE+^~kKT7}e3j2g;ETPp95)n6$k5bHK ze;H@dB{K561GK<9imt0})4J~{Y8*tSj%Ap1YfH&9G7GLHE?wA*T<;EQ4H%W-;W(~U zJi)F>cERI}qkO24#}TD?S{pSuhbIU^@skmEEOe*kilV@7Zre+44|y&yPt{aCBVY#c zXlYT3=g%!nzfWl5Ys`-g2y7@MwcJax$tH6XAP)db%%WJ5$dNPcOPyo9W1WT@9b*>A z?S@zTA?+gVS{7`ULD(WdrcJXo;;hTJ=(BWc59zJ4O{IPNvtst@(La8tP5-Ruv^r`N zpLRN0@dZ-Uh%-H8Gu1uBaC|%%kx-Oab$cgmhxwtv$3fF~&N7c23Oqy^AK&r0>E~vF z8As9Gg+OHYx@$deY>kAsSEgSTx?diz?A;hON&=9!7P$*uCI^r94Qho{!Jvj^BBp$Khr$JAkbx8ws)`Z0>{(zO0_9R{ z*5qlJErfasYd7oy-p{T5WZnyLH)pVHlGSbQgk z%!r!U56Aa4#5Ex2DtkTg(fJL;ZpRz%v*JL4sr{|DB52B0dT@zf>Tg*G!O^v__|Wyu z#+n}-RDO_8_l0I^ug$?a7lM07b1()FyyAINw5cyMPz8sSD#FbdJ@cL8$-nX(mThbu zB@ecFHeHO+J%FCX%W6Jxql1QYe3uRJxxHgZ;b$dlp#2NG>g?@szwu=4rdiRuw)n_r zbTa6g6tNdbls@x8+1mXDdiS4nHfb^O>aCBaT>R_0C}!q#YDS3^5v^7DE14}l*Vy8S#DJN!rZ9L=y(1fU)XL-RX(#g z5ikXOq7R3(_PR)?4Pl6Ck5KrKcG3Uc8kRod{o`9U6YraJa{8`KOX0`@5`J@|mNpNYSdF zycemSMt@R9&oZs{l42(HvrG`G-sPCMr zd=|?P_Zcoqf#!h#1BwF*4LHY;z;Ya0HoVlB75#1&TOb)pAh+DOzpa&7CCTpiFct3$ zAvw%(9bTNdAkA3fN{`yXWoCH;aowuW-aM5U!73784Q+3>cyM4XOW8#c3#Y!4zp%8O zoxD+=;YHi@`kQk&_8wP@_Pf@YWB{Ti18vdf-R>Sm>xtXNh~($fowK5cfCOh3aGzy0 zk?H9--F61W&#PXtDy7Ax&MjyP9DWuge`9?+rDGz~J?mI?6M5@1Ef*nQ$sn`Wy75#f zB~f%Rd|o4{Z&#Lo=tzoZyw8n{$l!3N?0>diaGRzJ$`AchyhJAc{ovKLV9=1|z5@VP zr-PGZ8vfemrjt&2#?M;sq)IHP9%gbRi-`0Zoxe0RpZ!!w_OZe2*3kt13?T*_RR0?! zZK&%?5kTzf1UDCW2p(XoyV+JZuYA4+`1AQUPaY(_(zj7xr4!y|r$KR{Z-%SN6|&0RaaV=6XDh#G0DVkh+VH*SUFZ0$B#Y^!(x*PN5x{`g!Y^xh$us_?+^EjqyH= zkMDD44U!e@69;?C68}FN#Kkoggc0|Ho;N6_K{xi{lgt}tR^>I#ILWF{17wfSS7JFr zD0+|oQ^at$LhV){+Tb)ocCx#iRn!T%2LltvyrEXlfp;sG0+lBGGcuDwEpXQgw?}ix zo|r*8O*3k5;hepWp@FV#qBT0CSkRM<{<|-R+{R*DB$w#Q5D{QLw;$gXZeQ8oS-54- zN$J817aIhkrFC}Nlo!&A+e+ZuFMvI#f<4!9)8SEjEaI(hx-M?-T|KhBPwGj1pCia# zY}cV4jRgm-yX>g#K-PsZ&Tx%n8NexIfiT1WjvsEXr|Jm$LN8dqpLBPTl9sc3n8EFD z(CEp5>pmeFWk{dCDv^U^_`K0Dm5+Avld}A^>w;^b<&U8Hd+`=};#DuPh1G$VwEljc z*?-lB7Xt-WDI82c^KSHP`+!LKra8ZWIDecOa#{z}5opTSiM6ebq)ccU}7vA;uW(-z+Vp*y|K(S%V#TlKaMUVw)IjHsI z+j-!6=vBG(G_Gt(y~N6NgxDVP(MX;?+$^XHxNJq+daqYBIEeS&1aVAKd}@9aOSM|o zXQ&a%S&SX#_>j-hmCqU2OflPT4gC>-dTTCs-n_1>K1})Ipw0F&Vf2G7;5B~Qh#oSc z#$Lj(_kgKadno+UE~utMED{Asi#SOuN9=sEta-KlNT57&ox+hJF|*TEbnhm?5_24# zdYY(r-}*1?W^qO0ir?CEa)`F$Q3XP!peoOuoytT}*lT|ypyj#O=O%h-!wuVgcBFc? zCE60r^}(aLB5KOSxgs^lfvWl7`a18r_*;6Td=lG%1~zWKi>#M{n33Cj8!{4EwtNGd z9kdz--}z{KBcTGCmR7zrH@7NXtw73BHl~&W1lfo>dA4YKif;Ki*X>9*Tqp)k8;Lcu z;Ym*y{5*{5O6CjCJTv4HLHwyTxgL5Ni0Jh?!D13K?0X1cyk%xhFtK3T3qR$ne#Dc8 zj$8kgM!=O>(RSPeYA=tWRql;N-E=W!?_N^p-B0Z{5ciYe4p?XI99#$A{8MX~`4=Sb zpV1-*_W{ySChCiy9`2}|jcR3@$f*JO!K2Of##IJ0GTM>!^D@cjo(SsJhb>;xa%CqJ}3*WJp*d&?lo zbp=ITIH>jrSR&wwfnOrQizyWD<~ScJ)Fbs=HAc}%Z3qgy3U$%S3RjX`e)&?5m^c|WDAj0Duz@tmKj^NFhfSREJH~zscg;IDJ5Bku{||t zY)K3$g|U~l5@X4}eea=O@Av1s{2sr5YB0-vpZlEaT<1FHp3xlc{#@>8N!H9lscl_O zVzyVWSsZA%(0TCmxqAX(dS+K}e2!Ab45B6d_n+SBplf*e{N!X^B_c{f_u`r z+VpabYQ{eggawYvAm6T-mYKvW7Y8K-WR(YKt`3a(i)E7X^Yevsa>tz)SfQg0s53ic zG~+(83*dR^Y*5ibil1@)T-t-QT!D3su`!NzBX~2%P?&8b4~fEyvNIO4(ODd; z@?gs$&&X{*+blbMj5M`AXo9kn!iB=B1xNf4JHDNhAteyun2S` zn*x>-Df^QRg-c&q4=nbaM@ma`to^<**a(|lWsg1#|}fdjV&%T>uAWxij}#n z<*~1sH5~^EwB6Qa~t0aNu1sfCl>k4S*WC8?jFg(j;LU( z?pZv#2VH6h zvj%S)-=cFDy3}6r9%2!=4_i{bld1Ej{X+9s1A*ViV4lfum6js5oK(G^?~MAVIB_{) zY1>HLGs3v`$Q_b7BKUf)=k+| z&(}L>U~9?!ru#6BiywHrLSaJHZHkC>d6lp>S!a8fGPm(3ijvP;dYZP;+vc-)$V&F$ zG%2hoad@gURaS96g2aaxOfQ-Fk-pIP`$vI}4i^%aIwQ9yl(ZT`a*S(8B-`|P-o;K0 zV6x`ME04>Q^>&D-;J-iNDORBy2s%-oM&$8WF5QXG3xjbP<7`}JDJsKl)d=>YqwR`_ zQx}8|8VagAiQpV1Y_XgW-*qA<%FW{!X8fdwoW*+%Vx|}wO>Pt-hmeX`-98O&$1;Ma zkf@3I#4>B_$?0Bxeq?|=*J-|R^d1BE*2n_be9ks`i>1ozD#J4z3QGs^YZEdkUdTa8 ztFg0))XL{zaUvK!*4QU zVrdySMf~VA{a_@ zk3sz}m}2hr<1`^irDXY~E_=_b1i~XBvdWXCTYVJ}H9>%bg04p7H*n+(dwJH#V^^%I z&(IuKtfFZPV@K`ADVe@>gX-8DQt_RmH%Crl91#FanRvX3IwtGFsN}m@*XoF?U-tit z*i85b2Is?E0ncnQrw=kQX!Eae*8PHbBu6!ofsyCB+C3p+Ns&L|dEu^Tyd&BcQMZ>D zLQl~gITLAKo{426kte&G<^3y&+$m**o6?s1=-q|@zakwP8E-g^uPEkbh(_8QzN;hV z>A{7Xxt-hv!Z@I!-4rNMy*MbtHDshnt3W<%_*2AV1t%%Dj;loaSl`6CN!1HF+7*+)ldU1SENU+Ow{|nQza9*;C`fQ(*&~TfqSSLsA@N8_W z-r0PBb#l)Pk~29l8b`6|+8!}p1tr4fMcL-o?#7y}{C{%XQ8FQNtnOP@ra>#+Kqk)e zn-ZHGTioMs60Ev$h2PZhh11N0xcHW7OoFESwx^}X^WMt)2V{wGKxcotyRukuL~vsq z-Bn&0bj*b9u|?e5IY2>(_`KH24-??E$gm|=TGbM1GaOBoFbiI2_!o?lcJ11Fo>aL$ z9T!@A^nE5tjBX%?bNR~LCgu1&lTj_$84$~Z5|?L1 z?b}R8XLkJSHgSdQ{JREk@3zr=JB zUV{|{!iDJElX2wkS%a}k*aYRqLSHk(ka8TcqV375K_H{nLv!Dw4KhMnBE zN)lpsfA(QaofWqs9Yi1Fdr2}jYmJAymJJoQC-$t2COkpF(Z}>jISY};(xt4TxxGz4 z8i6{0HotTr&?8s8lVp~1J-2VYYyu*CQ>^Zi_*%`XiFu6Hz7gjaHN?t8^d|H$jtt@rV+c2o)QpK7f{DM#m>pU;ncye0)>Rn_v-uLeXQ)V& zOPH!$j81Z;<3N<%LC;VT@$gc@<;<30Kv1ft+CD?@1gSAs7qS%IIAispN^{$2sp&r4 z$eE18@!=Nfd0n58{gX=Ra;e2-O2Ra>?R(!~qA|~>1e1ng9FqDvZ=pm;$)vG|F7MZvrZovU^d+Zun;OwLQD!`CZ9tyjOQc2$g`Z+OD z9_PD%|M(ntH9pa~F^tqT;d9A6!h+Skip5lx1!R8l!S|V&&6I0bY!U9oG&HPX zLVf{rjQ3e=`#-Ze8MeUeG7+B3Cpoymry=J7gBkW_Lq*u-`ZD^Vx^Uj&cK6nEbnf!w zm}7L=J$?Jts$u*{iOy(24i39e7#mol20OYw+Vq)?Zh}5}M5#iy3BOaC*9btGPeu4; z;A(ak^OXS|cj0Qj3Yh@FRfb~cyzJf~aV#`PVP1lymdh+4IpByu!Ygr9Vl7tL-N zt#fX?=X`BmV#^8BP>^5Ikd9FQd$;Hp-y&%#@)JG)#-FwbQA%8Ue#}&&_ZTJTW@4*2 zQG8^TVg1;irKyYxtW`A+-2jGhNf?Q=q0-p5QXSKff7v$WNv(F2O5wVq!^KLzdD_Gp%(@NRljeC#ueT@6xZ@y3XdR z5fj&Wqyf`i^^v;3%ldaEZGL~cd7(}SdjQlxcPU4E z7`O^f6kHinp&xGpIri@8j5#_?{}j&jn%qw<)<3TN-yi^Rg7CPc-*3{B2F0YK&j1EG@PvLOPe0$!`wT@i~g2QvyAeoQe?V0-g7S}{efcc z#ld@=#$eHXW=wyf1ctujsB|bDv5J1rLB9Iw=*oqK4^g3f?215j~` zjBgX)aNpLHMDY+>F*o?R8YH6f+VKjLR&99(C0V zy*OZjsYcGkta;Jh-I~!v-2o6J-N0xmnt5FS@mj zI#a&z7tibkGyG53jxa$5#Q9 z{_C}o4%|1rt6JY4aB6#@FSXpay>IAHuWzfL7c10}XTi@{*7JQg&TT1j^WHdDCr_Lm zCx6`6@dJ1fyIhrP1Wq__Nv+PGK-jF|w@P^-yAaYwP2SO|y^j6Jee^b>{@iM|LrbP? zLuJm32BF%Li_P4`Vh-piK%FZevacSur#U8GtLezx&T!aFYE;iq(xnxToOAgOE&YRj zh}cwZ)Nj>7A}72!KcJGrg12<6x%M(|JH6>9{lOgzD%td~lf>fn2aHu|A+4EvFfM%& zExj6fp<7;T@*_UH#lx-j3(k8vDwS9%MaM)gQVz%G@n9MaQVaxf`s$xW%Q9?fLdEFl zi|`|3u6k_pOS!+eP(R+~8TuU&;|M~ZHn@9$*Hb0WGf{cuDn+!*A@p1-^e`MP;^(qr zGx&s235%!LQ{TT&Hf6#Wleqa${DA~Eh{<|PB{78XTrru6DQBLIUq4~cKPM{RsKjYc z2+QOKUf;qGZt&74Ud(d=`&A24{Z?XD(GW28ReQ*>b=W5E_)dYi*a_*=zAWDcPyR96 ztnVj4=@n@szGYe~mUpfJu7fez8-XsW8A>FJ;8;=H=n{$BP?^tUSG{&v8t*eh!QJ8( zCt$3Banh5TJGxR#Fk_b{-Q#XdN*yth0nh(8FB@EPH63Vr%Usju?_w~!p6bQLp!RVc zZq|H0w%bwdb6m@$5UX_D$m9`xrWf2)0}AD-s1|IQFwBj>C(FI6+mj54Yp%4 zmAikDj=pD>UThdgE{tAHozgSoF_AT6VMr=O+)A zZY=FWp*Zj!eCK_VD+$m# zCzr;#i}JI2a1t&R{$6UF%}yKsb%e*93ee}H0qUL5*FZbDD}O6Ka((^p2aV#q(D6cR zrHreUt*xs8m7l}S9-LTZbgk+rnJ`J4umnl6^<9qDiX;l_FEkuGe(cp#3oEAkhXM@U z@|?I7uKjo6P25JK(7%!9pc>2YJ%+MIx1fX8=jt8R=A9h441<3UQ zf+1$`p{>nH(Pg3C7I9XJ7dbrST3j;h7E+g_xRMPL5#t*s*)_8b`6V#bH}VaeKP zBoba$fw>Dk?3L+e>;|p?LKjdlAT2Po$@NrD=ykZ>4%RIn8hn9g`AZPkpsW8_+%xJg z^$wNfeG%AsB;J=*DSqx8*yX0%wNx%#D`kK3U@n@o=iLe-#Jup-39od&v(?=36%OY{ z{OSs%cYc#wb*;U1R;Wt3T5v^#J}4q6zU@!yjAQ%bvzz}Z?SxP=~Y$~JR!3s16T9X!Sn-Qwi5y)p3lD?A#>maeC^F`h7CG? zff6zcefWGXzinp5mEfSD&Y=)AoNOxEY#@VidHU2Yj20v{*?Y3|IZ4e7kv#B%HIB#0 z(x$I4v%v_D6)M^M z>__fra@$CIifVQ4)0}B@qJNx8FYfq>eLOUF$RWttzBIeIH}2=G2Hr^$bI(R~KO1tf zJuH43U0_`2PQjsvgny}b+VeS?82pVau+4veE9hHxhTQ3jW@N27OBj})^`W)gY%2!$f>FJsA~ zvG(}`O@?>%1$k^0CFE&1I=QakLANl#n06ru{Zpx-3GCJJ6yE&-sdrtN|3tfE5BjkF zUGezxr!N%zTxg4fN%O@YM=O|N!iv0M8TaG&5jNS&al7V3#7{D^UCjXeYGVB|{oFV< ztaBG3rd2$4Gt6==r^a04^yg&oai{`o?YLLff(?h5TMdPs+0nS49!nZ{^@yaPBI%Zo z)U-oDH@-{uIEb5ZRrAp$ujs>{*AUeLXdI*x$6+eqQO7QdN~&v6@<% zXtT?ug36{d`xk$_FjHIl(BJg##BRX%>kexq>t{r89xZ}T8NR6L@NW1*Zij48QM7}{ zZRj(4V!V}sWBx8ZPuCu*-29RjuxT;; zcii~d)78{7qB){=u_Tr}_xm>zGKu`z9S2{KVC{*!vY?;wE7O8;S+waRP z3UU_h9e0>BL9+}Qf-22%X2=vSrfx&gJD<3jhwbUNjep9+x-b62c2-Wj-XX>D&!rJy zk0G$fCvACFlGa!-d(T`vUyGD|S_2#^EndwYarPC+nY5tN5!F|1lXA|u#+9ZXW&d}8 zB=@~BU~%%z{5lZedwyqb5d&P0=y=ICP{=DK15X(b4Z%wfN$k__oU zU*kFt#6ws0%oZFz7D$q`9;p-;78yH)`$kvLLLrcWlV>w^3B77v*H|v=sah15Fl+Ri zp@}@6zwowhvs_gMAMYR^H#ZM1@MG+3O!Dpap7Fc870famf2aibkKoW8Tb!!`^24Xo zO@L)}91%0C1L|W?Oym@mS-A?5<2>iZ@j?ldJq^@smgeOjoo^rALF;cP4Hk$r6ADC! z7exQ_0V5F>)c1r&P(OLWL6vRYm^1$x{&cjWrLi{eY?7I>-Sbt^<@JM~BP>$(E!Ggv z<<{+Hpq)l;4+mK}c>^CekaNns&53-lSJt4^!tzH5EW&~hEz3>8tI%T)bre%c=zb2; zFdE1+CCk7ebG{+CDC%H2!IG_A{1r9GP97xKsftda5%9fhs}0%Q*(5{(aAuwn`#ZM#vW zxgOZ{U&v`(?=z+=;M@)VlT7|Amuwz~_%3?W+2&Xp?L0G8f@rFxI_ccx1xd4w4Mowk zM<6AxeEO&l!Tp}(xhfYAYsq8%0q3C&m9JK+RF}_Go|4Xk44&aHVbt7_QJ5u48}w0*bd%#Wr^Q$#_hw6t|>H zRHmu>-MkbFwXt9MCm?DMQ^*hFX$CaXmp=IVY>nW&>d5~izs;~6=F-RhlrM{uSh;}L zF-pi}CDJq`$)%k!$tjz^3gP3Ue$h*=Sfgn)WR4WN1=VJ??Pl$2>4IcQ=$ z;k0zTFA&Dq04cmO`rL)af)a=`bL~{Ldk(~vs9)}^?)Ta|3hY2lE>a}vHc8--WcrRQ zu*B!JW$8~pXQU=D&#Q?>JQwx-mVwIdhymvd+V3latOqM-s@_^P*_~}nz%TDAChEo`FKRU zkpmi@a5IC-+KHV%i-Lvdu{{Oa7bg7U)K`u(_f2@vzyYaGhQOW#@iHN!$yQF_J?KO> z9@$mg0({!`1uHS!0Nw)nNYOM72+e{(t_ZudD+0Y?ritR<`CrZ2>aJ zUr!O>Mp12taW+e@`Az`=M1U-HfP)0Mk>ztt)?0b3PXgz8xL2ve^Hr*&h||c5zV5!} zSi-o4%|dio`{ek_YsBawv&r+J)v=)kFoh!-iNYXbH6bQ4X|XH6)jWt zyn8%C-TgP~c%duROngyCj;?z)%q_UI%cR$jR|LneNR9g@+3$?|#t>2(*@0P-Fq`O> zk;Qk{0UQ}mvuE1rO=JQ#XgI{o&i}(a)kr?uZ@-?;0|#mzH0NT{ z+n^Rux}A|o|9saLPoWFLK|KJO@5Ad`<$g8hfhdTEy_p!fh*>EhGZn_f9VGgOgFco(nI z5O zJoC7jwi?nhz4PRp9FU{jeK%ce&^$4@;n32`t(k0o%*aG0ehd^l<^vnoP*o7GEe}}$ zdbM$yUyv>lhTrqw6nfJ{P0IAx_UP{q({$)f{-#C1{SRk)Pc+RZ=k%KOa8gpcy}oIM zvTU;d0NKYUf7~OTd$r|uTOG+wFZ8_nZ`XgbFk;R+$TirGFV?NQ%f*12|FuaBSs+6Y z&n%vRaJz?Z>D-0db48;PF6Ppm1!=FZ?ZLRbW}-o*O7si~)X5f>d^v$)hyXY|`h|Er zIAe5HxJ5U^SlSjyyvebbY`aOfy?bt*a&L4mSIoiQRm%mmPeneiEIzQew|Vri0&wxd z(;uQ^{lu@>&%Aenq@2!hVeql)nRZ0&a)^Uz^XdJzBXJzmaZ7=`H}<5Rey87 zPSCOUdttiLck@nG?V2H-7GF|K@^|t^O?WD=N$eyObjG+C2S0ucv-(nUk5t*`C=6H3 zVraE<6u*lS^EeqWj{)6xsFG(>aA0KP#Gv5-0WL$U3h#K>zKd5UG)L?ku`FN=}pXT)PQg+>k$fQV;Hj`kdMgeQcn1IHGB;-QL>713<$a6D!9 z1Uq#Ph{YwYen~Dj>h*P<#Lb{;WYJ+m(Eh6|+DmFuz94Ub_q9@_ai~k4aiQH%hK7Si zl;FiBpv#%;fzK3=;ZzZ^Z26tX&vee*U5#!=4_J|N@-K1E%@*PR%jc!aE-DXr6htQET_+LYoSIp9YaW~ z;iRj@C7AP%4q|x#_|L$^PW05jwd}yP_Lkm{5TL96D?@F%G8;6*$?Vy@`u(>4T?Ypx zaQw~<>Yw@x#LjfugP~o(0pp^Q5B;&+J_#X4_Mg{=z|LG;KX*6#hx4TCb=dfNH}2T> zf@=p?(SX*GN=AZe` z1b75SV*t^3glVhjWy|1x^7vFE@EhV3{H zit+&P*(a&@7y5g`@ZQXE5s>&iWEE+=Ic?kR0Q#MZSMXapLwI}aGxZIL$Ch#(S!6w+ z(p>KAdI2T0Cq|hhc}-7OnAhm#LszGhdCoy7&}~{E&=e|h2_y!fyA(-V;Y|3~c67;8 zt3l)sWEXNJ(X|zErfme#4GdBaz#IKqkp(j%gHes?1s#-U!%ErKqV$Y|a$Xy+pSRS> zHpr83t^KiO&Yv{|$b@c+DYeAj%FPv&MAc7A(X%* z-ncyG=ngoMN~vnW?C70xy`SFZtZ6j=Dm69C`<7l>pwvt|VV->>#||<0SS>(~8*}Ky zbrY-825^Prhzcuqg(b8~bF5KECDTE5TDRSQMy9Hd@Ejj8cczS2h}tyI+*8H|fSHLp z`H0JWS(28N60OkvX9ebE>v{8caJ+D6)ud*VAW`00C&OO} zWGc(p9rTrIghc$?ybiN6@?2_!^e0dQ%>KESMguz>l%w?5 zX$TmNQBReu*-7VdqB4o!{1E>Jpl##{yKQv*pQvu?j8yENmIwWc#6r*ng@=qpTBOL_ z3>5}&c(lPFe<1|6kEtfd#*C$}M{%wEjAYQMl@9kNGVTlY^lOg0_qf56v2vYVDl zxSdsmH8FmCJF76BIbTuP$I%U%87_d49-|+0GX0`<@ioP^+Z4KTSiapzG-atT|3hO^ zS8st!b>1y7pMZt|FML1928R=rWda5We zvYz@UrXKj;^&k^_b}%ZyQZ^kKES?!JAR3wue{3@S+Fgh|64yN17x6g!GM}S^)u^@p zE6~}%rt(37&%mqz=n`{Yh3}9;T@NOjXF#W z2>01HCMTuy)D)UQq8PjB0K1bX)g;iwF3T zcS$RZ*9~d|qgY2bNiD3hr_;*0cF>(&G7O&lmz0z1^_fAiNr&q1g>rv~O3T#jqLT5i zu{4@&Pg74&3=Pl_Q8Ra$F)pUWd6bc@J~tnY@r#Fon}nySvwaFu%Pq?`h?3v&S=_A0xjtXIC8=ga zUDS;K#?5*H&qvN|ZjDVKxK|sfV)UzHzdyHogtkVWJx;n}OXHw8sM5xoW3yj%L>)yhm=xk{T4b;ND^A}j#a2GfB&nD#vH5HN=30(kqS_nEfHebqDd z@)Xf%07PJD!darZ^}!u9wR(8RdFutztMo|5{EZu?F(Cw3dJ?noa!%O40&V>vKXwt+ z=jf=)0x-@sdeh}S=wKg~vO};Ri|;~#hQx_zvyb`J$TI}BIA%kf6BV!E5>L)P4X1oC zJgov^0u+ZIvb@~qd6_(Xm zELEJ_(QxQPwvwaTa}TRv-_L~ws>9`u^Apfg2s$i!6-@7Lj?3V;P$hDcT@ZYQ?1ugC zqy%KPRD;pjne0;@;+60#>+rp`o?BDF*2Y}oe_}9YAM-UH!+*Lyf0Wuie_e|C%#`mh zb`_8I&*8zGP-aU{tkK*KXk7K{{p|2smiWDVtb+Il+Mhltf{Jy*2MFC@ z9#MNS4_s|`XsN^LW(H*W zl(du2gTlm}+DhZd0_hx-W1L=fw>!$fgfq}<_H^_XcmINsvJ-kX-K|rqX+Y|X`Xmb; zmAC^{9OdD*^6|$Tek45Z2f$eLeMqMn2_JZF=FAUW`CJZFrt$q5ovUmF#mwf2Of^!p z8cYE-)&hl1EnqV|MpKgiJ-L5v!z2n@J?SkV@UzNTwUP(}ET6d&JoBwDj#d*DoEm!^ zrEEc>4M!H?l7q&ujl!tLq|8jyjM&NoBrgKxHu(Z221oHW7*NG`_q~ylDT#C!l zMB{DO(P6B3Xh#9!Z|D`VLTR^u9z)sCV;5R(0kLXaXT#c6ZVao9XYB0hn}3C&fzSlR z8Ju)|GKPr>n`b^EjL`>E;2chyft=#SU+Z~)Q;r4l-yf#{ZSX&jss+cmKsbD$aD98t zj=?j5vLGvL&(%UO4(L^yao7yZ6glZNF1zFR(H|&zfKl43Ruldd`Jt7{5ZG1G6t?1v zFTrrjo(pWzd7PT?%LMuA2Q!r!&CRi`W=#3^(6D=a1#nTqFxn3Kc(GbB#e?0gY(%qbAcrwkU6^NN2WLtxnTEWcxW(~XITHFlkTy}ZVr3LS5c?;g! ztGw~R)c=V$;Acx^7YaT||FZvlzsEJ9{vl{nZFWW@PjrFCvkk-!z5g%^+KvWoG7c4PEAzzFD3b0<994t2Ts-@`{O%J{<9@8ipxAa+;548TJf)5;r@eU%vl%U zqG0@i>2)4O0EO{?^~p`A{6EhsH)GUUFO+o6Haah`*D%1E%2BL->~PqLnJ?QbnPuEK zo3*8owMO$i#X_drbru4h>+vV%K7GekF>$K7h`U-$NBa-@H@&ncfdrI5Fd~njKwtJ0 zUWn=Z|5;FF%yzJCc&locyC@ga_AtUtJm{$-g2nOrJ|I5duqoIFnf?^0Mh&?WSHBIb(X2%tvAL|% zgT@Bf9#evDWU-fo;n|mZ(0QbrZj6o#VNyQ*?f&57Z z#qGs-*XAt?z1|a_y7YbANBUP&RCsq&j}`G7-Xp_?*xT0jc6qA3WpHGx;li}dU;Bma zu^wRh?OtXm(3#ztgTB>*OhxA)Y+naFy~FQHWV-4@e+e|f$T z={xyFnv3SS9rNs$8`l-22 zA>I`X>P@?0;&=l>mS1jLot~8Mo0(zL5}Rr^GgBbL zS%6kqyZ9p%HxGex^y76E1(FYs+8#K#tx5 z5_K_7X2W=aJ8TbpmDyDud=bJt6y^vA*x`#?^CXj&x821PHbcDPxwpFs+f z!e&PQ8SqPx;a;(3!PG3a8d>0K2{;Yld(4G_Rc3!=L4nIssX=dAt+7V*cL7mktamjB zG;zS%E#NEFnXZhvKXHoO_vY$Z6tgXjgI6m4F9nB0hh{UL|d-QlWJZ<1SWYue@D_897r=2O#Su2YYX%!4} z+?ejZu%p0aqv!VA&%|>h=I3^dW!dr=;TNdHr?XKk8MTn6?a!B!__T?Eg|3{>#hzTMKMp5esGM$Oe?=uVY}DBZH!i-XFU&ZnzV$%Pp&J?Wa10IuG*y zelqxY+;_-k;b?hKJob(w1e+wr2Z#Wz1|+wLU76_KBLW<#liSJd8?WT%MSJo*s-lwS zMal3Er=S&l$69Q;%yzQsQFEu8AL%;2&Qa614MJhoD@`s&0_ot2STzq((A#eV-nHIE#%Q;RB{ z`ntwDiMbk!AHWD^U%dAFaTo5(@6`CKkA7AhZ<-9~cAA-IM}=!rq*K2ee=hhJpIWnD%bOj37suIB(5vv;!+ZX)(5}tgCjkQgU?kYm z*5nx=QH`yPs$lo)yv6f(>!;VJ8^Zlgtj_pXzFXZ}@Mf*kW6)~h)1co5eafVA`@(*H z4-5Q9!t*_xo0qmEDACUuUG9;rCm4kR-(VGweg=EKnN400sie}TWfDE`i=U{r>#MYa zmt)_#Ug}5HyzIJip`pBRmeNviw6gSP!dGf(q~}9pch7HIx;Lm*>I?tblfSTu$6)6V zTUi4bZr3@Oy@$b&(#~~uemrz0G%{{a($D^l8Z(G5=Z;Q*>VcTZVJEhSIhHCO@zz!f zdHCza)Heg;r<|Id6$;ELp6%Pkk_YeuH-ZOVf67~3RG#e)5KG#gW_f+mvP8ZAq~Iz0 z$C{q2LPjgU*U3W`Ev*Mts;)9@tyJmH(dz%OnRm4r(q*V%sBO)HGJyA+I3jt%ItyG+ zgew=n+hsjxr8D*|?B<*8bOU!COXQ8(;OY5&s0f2>76slf!$Z_*2eY16E9KTCdqcYT zA>=<)7dg9EXNQt8QaknOu{1ZbDYkPIszBy=p#1L#VSKwhb$a?_Rmpw!@q!SzmszNC z!z*zkQ@f$*gGhoyC*r1Cq9Xm8mCYf(odold# zdgMHc<3OjW$)7IEijLBvNcXc*A4D_Jw$YL<5YUq9jatXA z=y?sqwI=q62DLQ@{BoJ?D)(q!(Al_d?Y~f`eyeY`z_|sxTgPrW^>$O1(aNFHocfUd zL;vq3?H~(iS8e!`B2>fj_9UFS2`1${rNgq?SOnF=3QUb{_!wq#jK?P`wb8~d9}TAb zK;a>ysUl=M-tK`fZ805|@ZW~2T6YcJdDCq)C@MKuNXsFgG9>Obq`k4z$$f3##>@WB zferN#lJA7fYtA&KE|u>}A5|vRUJC`N=qMb#w(sMx*GMp;{#0{G=hItv4i^N4IRuwz zfN{~TNS_|fW9=R3KbO#9ASi~FF)h@m`06mid#Q@=qij76+LJuHOH~}_e(gQkb-u6D z+ijPU-Ti~}FG=AhA}kc!j#B}pM&^`Re-40#djuM_02ut~X86oB>@9HyN^{XdaKK?k=@{zVn711BqmAAaeGu!Sv0J@i}#}X>$uB^tP?q#L8i5%4U zSaP6q@=gula}gHcfd5o9;0-0h#}cYLxCO-vDHX;3w|-PLBRt-StuD+>3!^>q*Cng- zO`WP6#}byUxQ*^}ZExYWb-VUyqT-8V>t;S@(gPrH)^Ys@46|RUV7tG()m)2>91QxI zoi)fSZco2b(ZGWl;l&VGNcm?cAK_0N3E9LSFyw2>M)WyJ)>9II2Gi-5iUa#Tyuxz! zUT)E%t{$7Mec;>tYphkV6E5n6%=fPgT&rsxO_LE!b{ie=;5OD7c{8flNAym(IrX-N zN7j2s#~U+Fttx3<`*ewu5;q#2sxD=-qbT7PiO_CkfA|5i-o?o`mt1D?#e$Pojq^j& z?bsk^3>f3{21CY!S}B{T`RSx1CX}mUrg0epw;3ZW>~9OvrM+wz70x#N$m^H60+-!( z_h`0Pba(VWe?DPdA?Ad7?&^l3q=kEjce{p|@)b`C80|!fr0Bouz8+ac$7us;(7kJF z_JVZBo+oE+aNFhJRkR2kR+%V~W`HVDX3L)3O5Z*kRSRZNH4diYTTY2XpZ); zsZZI^5(qpqj#VDbcY3)&I+^TC4HRE*B$=iMx)Te~*vHyKXH2SQPkVjW$Byo@yzFv| zJQ*&qw#wO(+bi{*OZS4%M)4^f?@d|>>aa~j!Ea5Rko9o ztQF0hPIsX5oR-zaPH^=M!H}by(ds#=P0Tv4$V7Gj3_K?dXV(7)xF|Ie%i}otV z*XHhCYX8aV9I|(gZ!rmS^Fj?Yys{oS%!K>(XnqDlg`Jt0O4}E{MWlo1L&CIG!!)+k>{yV?cm+@M*a{6Rb zkrD$T=4}h$2Ros(pt*@fnWF1fMT0Qqp;A$&<=jWjDI@mHm5yTx0_l~m)Yawf%8VF% z;;cty%f3|qwg<$9TY*J&VMrN{^v9a&eh)=lZo^UAu-E+D+B--W4xJkRYG0w{-Pm%1 zl)CZpjMvKDs6_wW+V1Zz;ZKfDu;2FyoFSWR92ZYu_fbsm{Ua?&FpIyx(lU5NCKz3e zbG_NU^C{CUm{LM)5V`a>sjMYK?0({fjh;^_Q}5GWGE!2T-O{y%Hv*>mvuu*$2bQWI zrr|7BKVO-+r2c#ItBHxswx~~9hgzll@?dxI^YA2_r7-EBfPAf|CeQp`f6VaV&9ba@ z8orG03&gqIy1)HF*~H;soE)sZMmTv)_3LQgZg=HnvIXhB z@9ouE3+2w1%30RpzCN;us0gHd5^f z0V6KbtB*ZZ4&xQUv9rs^|^5LGnEBus$%dx;XkyAm=}>X9lf$gZd;j-^+H44`9J+{ryIMM zkA*&(6}7%0ShX6yv>@k^bU!`llUB*1-t6kQTubZ;v!nxQngi(ascp&_-M+81eBy;F09vR*rDi>0)s!DL3u9p}*mmxUDf{BpO) zl=XakQmx5#^5)m|*ha2#V)ioS!Yvh^sb_AZH)*_RESY0PQMkd>Ua1I*)O^QAU>CT@ zA4Buq1zIn%Y|x#@`_;>ue%u{34Svz7TAG%PA1Gyn*KtN29|+#KyEIo-m8h{B{s4~~ zPu$2;RLJ*ht^D2b^Xq36BQb6gi(T$3x|>=!cZmg6Xza~<(m5%+r!d_m=uGm`Sw`RF zVhxXvd&&dsZd=#nr|djqztr-twDzZ~{?vS53C;8^LV2s-BU!pmsXTYSrL>V?ZY$k; z6K^?H`haJ%?RC8hY-d;z=+C7;%M10h!7zusZDjOnMgMcVj^X88td%X|ddJ2@RRsy$ z7;FF+22F>l#Hrt>Q#B!FsJjW7oG#`0v(k3YZysB+lndV4j<;H%5N4J3`FLCrWvXzf8Gp*JF>r1oYII1U zGjaE+ji%n4V`oRhW(ySAKkR>#*Fsn0d940?WQrwb*ABd>eUv127O6Wv|K{2G;`yPT z59*lJy}s$*?WF@&es!eLN4{psr31kplYygZUhV8AMxTD4e>owHN{TpfX@~8&=caSg zJ+=gVz5f&kKuh`SxzrkDp2C~C;OVR~w(qyS2usT=VnbEqxt)2ccp5TaO~&e0Y4!l+ zV~KFrw;Ej@*+*QWLr)zrUgZ3VySsjz$X(Xwtyoygafy1~lCxXqvCjMh5NRR-0|)U& z2R`4v8tQ`YK)&p=KqYaVnA!YNp3S3VR-NK##%7Cw$xHWKx|Q-wmK(!cITalSzA zN3rts<>CBDZ0RcXds0}t1egT`L3fW(eQWg+0yCCU_y~NX316{$j!8Z8E{t+%$sBi} zNC0wZU830-(uEjuMcPLez38`D)$fsDvU?5Av@fLVU^Xv_GvvURNVvTx;!)jA*yNJ& z|Hapr$3yvlZwLZ7)F>ewz12;GxmMo z_nqffpU?OE`#rDM^ZZk({R3s zeCnj-gp2p+;B-*L_Prsyns&O+MvM5F8S<-fR;!)_9`9+?7@f|lI{0-K2^MRt612-+ zUM*eBj;p(RP15zTD$=I{Co#GB(>(2s870BJjl1hAmW2|)Cf~Y>6+@Ckso2U8vbkHE zvN?FS*3c@@qCM?*0h7~%Kb6H9FgV+u1ycgszwi-cWB<0X!#L3Dg634t&#A;Y=C;PV zUYsrorp(}VXjXQVGF0nJw+R!oqLRl|O*6@DWpCJycVRQ@9DMO|uv6nC060#hc#oo? zqsi$ss*;U%5-Y1l8D~5{bel-)i`$jart>77P%&KxG-B$L3{0OVsJ@}dC=`(56cyEL zvq8w~N;V|8_h)|-jky>-YVMxw*_qKo=~3!U_@E(56Q}7W^#6YRhR<}Y)Tw|_LMQsq zU_Ub=(j8Iq+@P7_VXa8dZw5(!>$}ELlR?nImxsL?j~KwhVm?rvfK+Tp6{N{UL{;)**#a(g5GZ4oymrcTc;tsid; zIQ;%ty&?lbMSt2j1FE#VdEpBgDPat2s-$${+S19<*=h)gqb)tf$fRrs({ZYEBG zjYe8~=V|FAU*cuYmsZ8Nv2@b)T-7DPmF7LoOBj|uo0BmKXJ(Bfi$c1T*Klckl2Ygf zDNpn?F%x)Lw?6EF%QNr6)*84@gPGbm<3K?4zd?)96;HPXOz1SuCbU0k&n{zv!R_1; z%^X4X`gn@?JSXG#)~7_lRZ7jwEEO-cF22m?BXl#g1rxfjW)MK?&KZsiO334Y^of;^ zraSWxx)m!${2~W=l3`gp+g0_+0!A=Wu;cMRdO#PZs1Z_E9QE7deRA(m8CoR^#sOPA zN11vZKkch~4-5#DfqL78kw)%H`uY2fjv+*KU5 zrF5rvdSJGA+q?SC)$H3LJVKS6IlTAUFk}WyMX>v{i!n)>-Lc(hI6hftTV_OZy$Z6v z-Bt`3U2HF2$x)bK1sb+z2oAi$S6j=ghwRz_84`jxL>i79CR{_P2THBptvxiN{Qo?& znA?v@pBFkDPjL@pnvSwtx+yUtzPhngDvG&J?p-C=%Yt(bo!|iDEe0aEvG13A#brv# zY|$&CrElBb%hX7-Zcl>*k1hVx)W&m5LvR^rMYf!l9obi@AiQ>ZL}xM#`r>J&4Xj4A zjz78WC-#{3H}1B~M~@o5M)zc^oI(_i3}hq6_??}H>QFwpazo2Mkqh0+l4%{?HnRm~ z-{-pXy`@f?DO+y0mA^UJp0F|nS)9mssCn$L6)$eu#$kXVznNgs7b}>PWPP`-s0Y{* zw-{=Jk~yD_uYDpPX7=Qm_<0HQada{BLx!Kj^MW2CtAV#DL`w6>IWzDakw@Bn8^EKgg&W&r^7*NOzde+MPH@SgpXOzApdQ@<^>Z^>1u7cfnWj<~ii;oC8 z_;F5$#$#y97!D9V)h)lbcc(Ytlmz~EiK2LCaCH(mjVF*>_14McF$AD^Nm^w5o!k-a zK1zAH#F8~8ET3nVUkYoT5Nx`3BuZrayk*$mHebX8o5!@^NqGx9u(|(mP3pbdT|Dz8 zp!riJXQ96`Zb(;hwsnsa>mDRFEVLj_a1<}8wIZ2aDMqjLW<}RXNB%|LAPNR6m}tBJ z*n|*ZFTh+ZhPAtcbct@xY3ot1)>l zqWr!yD>gGyqD_)J8~A1i+tSPLG#XTFpkAALAY~k2kOid%@QCHAT zD~??@z}mI0g4s)5CQ4nJ6tY!B}xi94f&CkbNb}g`N~!2 zguu5|cODtqR6ko#P;7i&cyllw9b4KO=$Y7Q3eJ&q>R@dbKlDVoxMh1~*&0Ex4sNU8 z?=JmdWJQS4a^ArkLFkBYbYU!#!SK#@?FOLnL+L}9RMC7oTfg+%X@LQET{i5k-NKJF!ryJ-}d6XuHEk3<+=OM>;7Kih3V6=8mY&ed#} z-s2F?Cn(6wuq|)AN3NLL0kvs&H}ct_Y>M)ldSLoyL>gH`let3Ru!biN;uT#|zGST7?+c!fF=xZ~i{xxTZSAQQe% z&5Ixu+C8o}RuO6|JHfb}1V_&JpHJ>BF5U~*sctK&dKT{xjdQQ`P2WU^D_7@`w2afy z#xY2mE{Tm?-@5oO=8k3;0cY3t&%^a&rYZGRL&3F+?G=UO7_=(7;W8Qlld^efXeH=S zSQ-k^Mn^XMmb0h8$X^AP#~NhouU2cEegiHyEnlkWeMf|;6I$(Ct)4kPIB9p04-V!h zh)*0XD+lDe+^0+`?vgw`$Rf(uu=YWHGw?h{?R!nG&K$Ruulb+|lK?G9^_7f)m2$Uw zA*W;fQHYiJb*Y10V$MX9B%K}icF~hrs|&dar|)n_JBQ7Cu$&O!<>HZHPA>;`$fP*v z!FooW)FI$f!$hu62fiWls_i+<4}4N_b6r?I7E~W2gYO6Ff+iQqwRYa#gxz!+9F{~2 zr*`CEKyfV}ZNUC`(53{1s>$AsUU>r{UR>~E9!x47wgKZY$OnTV5_M|5NEBL?q?Y23 z@_&(8ajSntJ&RyUfoPCEA%x#u@~372H5s!dSNakE8Bli9*Zxm*?I(lt>xy&ERm<8! zppj!R`3{KJK!dOer9J*Qv0Tdghgvy6a-jTY~sf_Hqj;R?ot882kHZF|Dup zvu&B#TPy8%+D)1{G}0~GN!pA@T_hMwsyG9;rx_0MNuxg%@T+7Ajt6a4_>(%%f*DGO zE)vR9^1|22&CD)usS0vLx@>R~Cr%#}zC5TcSn^n6XXPwR>Nz}!%h(}JE~_t^h`#xN z_#W`t2qNNQX>*J4tEmn3%ewsp45$kSkE(k6^V>u86yS8tRAIo8gOjq{ls_lBej_3&dN?}eQcwG8|3qN4Z>$3)iya`gH z&+yA^4tsf=M*~F)r^(_;!&@6;T?W;kfy-wj1OMQiKfj%|1O6FH1~I{T0ylDCgIPy8 zreDxV??&@3?v7PmuW2aEDmI3Ljx_&Ag~poMAUGy;9+bcY7lOjnK+!UWaV}XEaI&{n z8pm*`Q#I&}V%sXagrSkLf_ItN3wJpwwSaYUbUcW_03*h-HOuQ5X@gx<|C+~|`iEq9 zfZ@9z%22wujxFW+=iB|8xw%4uE8Yb)eYAC^mchkqR|H)(j0M-y#nX?`hR1%@qR!I! z+d(NgLmn?rET}FfKnxass|lbw6bRoGRfG_K$}_WGLZ$PukG1tQ z;FUomDP%M)u&6TJt8p$W8yt%~cP6s{jwpk(#Eqhau$b-N-iQ6^%=w;Qtvt6Ez*Xn) zEUz+`7LmJ%L;pSkn_UGlxK_3!=bQBgs`6h81i{q#y&xqaV@Tz(GtGg`bxgX==_nDV z7c1j%7`)s@=y;aokO$z_%l&3PT{Q>>sK*Cvfsdz2xd*PnZaY2L<_}FdqnA9-Sv_97 z%*w8K9$uM@z3w^t9GDl)Kaf7Q9Wd67&ZjL-HyJe+*(Q#3}CCAveA@5~e#Bw{j!G;GbOSZ!ubabgW@l60n0yj!Dg3Pgd znXTAA&b2~5vk)tqtOs+s&?(mO(>`cL%_{gD(M8~}C0jqgw{&Mj!L)JP;aR|UW98ZK zgJT0MY)2|%x3KW;c>@dAN9PCw5TaaSg@lfY(mI9h{i8WWGq19P@V4ef7`KRC9 zA|d39OL|AqffB^549T40#7dyvpKT->G*B?UfPy@Cqf5bm0;qgY!Ez2RQn_nU!vUhJ zqqB*1!{n#yLmPc3_knAh@THOxVAOErWKC^TcWwLqByZ7cQ0T*KM1c^t1U)ogN@v<);_LJFSrqUc+_%L z8KmEPDAm2H(d5okJ*OcNFm8g&Gzr-4SL2{u8DM|b^F>Ftq0@{s!pGW-Ks^OeHVCVH zE4sAoEJ^o1UeH6F?Hv9mD~l2ipynmS4$ip)PL{rT3Q42pI(W6`x>ANm{iYRr`4du> z&GYGlzq_9GsU7f%+gp}VmgqS?jIMN9(&Z=`wW%HE2b(mKo-doMSR4UX^8@llSE;?4 zzE05*{=U)ekGM0mxdmSpzB(c>c->1)P;jm8_}MI_vjA(`sJB-L#3ku%cVT2JrL-Id zAhIbTTO7!8O^p1^jx<~6#6G8Xmv3LM1xH^02~>Z)>`~Fk<3BXuzw=fgx$cK%u#y32 z36}IFD0BVkq)N_Id103J$rdsN8llSTsNg)2C2>3B>f4{6#q%$(T$s@drnr=?jo7!Q zv>AM)?Q)S2*wU+WUjf|6;pO0>BuIRRU4UQAYXH^07Oq@fE8c$( z44jEmV5cQKU^(E{&egTX^HaCPF2eHwnhQE9dtJ)#Jus@aWs%sTip^#lg6o~cGv*m& z`6vhXhwgTrzSW%t3g<>=ebdXxN;`iJj?L0C_0InyLc9C#j$TJVy&NLlEcXGHN=|T> z?cpM$;K2^Y6jTm-)?r;jj#jUAjJaOX+dp_RaOmGSd;X^|kCpo7g8-PK*(6jM_X%Ym(J%?=FER;jEo^xJHfi-Nmy!= z;vf6F=v*VxSjrnLs_vC(Npooy^0gVPrXSJh2hKPB(`5!Z;x+LzCTgGStOW#$F>0SN zi+@aM;t3I9VCfh`F(6`|aSdG0wH+pJMG2&D|Gv#8hDPrWlG7{|-kOV7_MqJ>HtM_8 zwVImW606xJBA1c8uf9pFP&RDZJuYZ`?XL8G;bS7WaEbn_T)hBAXwJhGk-S+ixs2y0 z#%De7oZFl+E1cA#e%PhU7|%@He5Ic$K`a{V z&Idk2g1t7@<`HJF5!+~FFGXy#EIgIN8sH=jVAoIcUDyp(6Xypj>M3q<6CjLFRG-vP zbgH_4y;XKk{qhnu&=$Ho9d9z#mmOXty~1h9942^GHx4>_jq{s{M6H+XNx zsgIFJM33$`&Ml<#o#(-LIy_aX2x+C#3D-pYNHoj2lw176`}?PVt&?tp_DhmpYty1aCex-1bo9B|1NIb(-}oJ( zx^f&s)J7(@J0^&>XF|+o!I_+p%uV?yR0CL!pHMWv(|SY8%P6#Dpx4+zbK9 zh8G+pQ8-Yif+z|Xljg6XGh?Q%j-E6mHytR+ZVvsb^>k)cYiO>ODS6wdGplRczW>_xna+ao9S_h@_k0M-;I9{ z0x+b^3`f^O3V3jrX@6G{~Yq4FMjiaeg+Zvpt~9O{+vP8to8+;v0$3N zKd=y2M5PbH?ML~)MFBroh0K`6O|PLOMLzSEW59U*d>lm{e$Qq@G7eMxVa9gkF~phm z`-E?X#o&C?E-Cy(PQLqJ3j@7r%!vYg9akXm+#j3sOak9+WUkwk@REe*Bq=A`QVi>- z;$?&AotX_%_k{*;qPTfRleN`J_zE3DZzlt%4H-$Iy}E=6Z4Hy&Avd_dqs;dalAAE< zQp+p(Yw|>(5FLVpoqKsL`^Cal$*3gHdFp9=S=9t;>e3~cm(OJ8?C)zj1y1Z`hqcLb z6ZyHFQQ^@wC9eYR1lh@I-J>5J$-}UwwUmWut3DOzYpMq z%0GkT^?5hf+ilGUT@8^Y8q~PvvQqKT#aO}KIxwmjm`%IE|2bE`+2Z12<3l!qt;Jlt z$e)8e_m96l)$>954<)3MK(ET%m^(|nP84=inU|~nrDxvjpH{H_TYKQ`(e-69r}w=} zQc9b!o%S8I=sDo1C3?OhjniV0D_;|F%xRRoY#`5r)~$&t^gk5*9}Wbb>!VAhGIGRl z*BoN_o+KD_N;}RRoCxlEn~2bPJ;|jf^zh~U5VB5^1bGv8*G+Bp-IL)5l$p44%sL3vq61ZGN4u=*=Ap>3m**dELBF zbqwzC{_}cZ5Ipy<4@>sFgZ_KaH|#TIBXRFIG^M@OD>Y2om8`uPeP6_?my~-x+b@@V zy^6U$RlJJR5io4nP1A7rN@;sOG=LRzEo#AGvj~X;AaYWh{)vuF7mCZx2WM<|l1rY| z9)@g+d^ogN$hy*)fDN3n9zj<09))>DNP92^CrNK(>WeO4_2Ts4Q;|kME;Wrz=}Oo~ zJ7k#XA^I+%)jbSUdhC=aumA3gCjOCS2unInB~#JKNzo{L1*$4PH0JI7P1xGTi^liZ zmc#e~40zDN^U6&KlM0x(_kCkZ*@cnCh#+12!sd}ID*J|A6JGmFBgT<{GruPI%oe8) z;u0ZD10`xd@`g)XL>d1?RiZz}UwZlB!g)kwWJF4f?@JY}5cY&C2fx(pu88?XU<}NE z{d#2eY}|gpdxqOu!pqM&*(2d@F2M7>+;e{{^`mIlb0L;C2=-Bvgmf-V{^UtTS#_BK z;Y#8i4c~F>zvu8L(LB23IpX`*-Om5l3Vv6Uz$e=1a|E%RST-y_mJge(lvotSUB43V zNvN~Z(y0kL8P9|V+>uLkU}rht*_}c2SGEB)&yzQ5KcunTvu$us)85on?c9>17j$aW z93d^wI7)Zt?MsHyzU57?r-fTt*B`(42pE)|oLtV5S=ExV44!a*D>3>1f4YwQ#>lKM z2C+q)bL%QQ;Bq0^i_#Vp%EJ}h$@ z&CzcDqX3$0PAtm*7Fawu%P?c6_Vt-U@qi(HCyj3BR0T>;KH_Ix^T z%B-uH?sg@VW&RJgC?>eh2D+Iba21zDf$6@#=vX&w8QWm8vPnjG6k5D1UYH-wz;w{0 zL1_%;g{jHko2A_kTXZX`4(-k|E__W_X3XK%)l%`&GCmrJEc z?cvrvb<|et{6UPew|%Z*lgn~rDtCV`07L}_jlX*p@B>*%j*=29v_lfQC^W-s0r3UX{^UM%ub^i?;Vo|>3S6w{G4f^DXd)_}b%pmz#)7(+H zR>=@6L*1mtNkE?uQYx1ER0%)}(HmQNzQ~8P+P*k~|f?)#UJ**UBdM zk#~)nhGHn;8_l_m1>&K|EK>w(#l|EX7h|%r1mn1jNQZZ>6Ww$>qtW@#*&jcOpD)11H$*}ZcV)z}_Xnpk1=(8$h z`Gb@5+%IWZ!lQ{(x;UxGlkKjytyKdcO;qOOcG=!aeZk_8@PPdW|A70(6>Dkd_eWiu zZqpi_ww07*^cmMJ_@5Ic#_ldRqlH_|!gg{F4H}ELpio55nEGQ7H;Sl>;@QYVjU;kZbbfe@=BgxWa4f zg@X-ePRIvN9f+M36*itN_KAc&OZPPdzh&))66zh!SH!=SMvPI$=>*_}jy?oV#uW}0 zM^9yQfi1DJwN{0K%_a2#&!bzY0RRY#S`n9*&U8DMbRK~+Av6kS{}dp{xTf{(Rk-=O z&?-|NTTMm0J-s)Ch7qG851+pruN$V1lJI?0cXjCEJ;y=D2QF(riV|6CHoKEO-h0Fi zUioi2^XcO{Loav_dbHmxGup4OL*bC)5q*W9xpLWezgHUT@<2wEI$3mkkXW51PM7jp zX5|?mB*k^NDqAyZi3wtY2ya$+pu$t<5K_O;!c)=@k)@{gC@Tugd8La9_A@=2M!2py zoQrg7w9H?JisgL(WkKBA!MDd**D$}f^05Q4zluNvYzK zMt1YVSV#{!Jit1~54w6-RZ$evR#yMU^Qw&3WfQ1YN;VAyyzb@o-PW|9id`oF<4Yk& zwY5jlq$yaZg*r&ffQC@~v+TJE%&h!8Am1=_ZT)CM6uhqJk9q!+87mn7TIQn#8bsu} z@HI@*V)Vq1RFsTZOznM*B9SbrzL-N z9r0i(4;VH4Cn!F;boK{X$Kq$FhlfrdCDeyiw`uiZv@+QCAdl32XHn&zLhaq=) z&|NECTx3deS7h&c)IxwG&&0XDS^)+mmwOt!<-0cZ(Gwqn0+h=X9FirUCBy2tAl0ThqiNa9 z5^pEPn6HG(=5$EO_akaAh)BLO&c7FrkbWVU-?4!ca@i2uH<@M zc)6>e!A%Vo-lu|3o}&n`;jf4)!heEb+cl&Erb|LPzRmIPQo{WY=luR}D_HUA4a@`9l??9b zf7{}#$3jrS6{H}iIff%cj62c)v57x+16uNoY!CxhOcd=CsdMhfOI)@3m#)D0p9Z+d zZ2Za|1%_iO9lz=y=}8rggFaFFB5cc8_&va3N+-Zg)=#=bD%>8RoJL)UUXlE9BW#F6 zf~HGLKQmI&YW{QxxYBhZa$jU69&PemFf4>{XNa#@5pCj{&`$-wSo+$ExVo2lXFds{HO{iWC!EyeDqqy7gdvV4eE zWn>C@{!XMDm1K1mr)Ye9q#b^+IBSI8S{0i9T(OI z+=)h9+tKK>)}~2k4ByAW{_l?)I~b`~UGyU_B0kCZ?k6yRNf2)K!O9`3cCXGc$L@^2 z%L}I`2x#XChZ{kBZMzDBCIi*&Q?_Iv)s00-2g!VIaB zU5R#@6;XYhFYpDrmYr$7aM7v>m{T4mQ$VfqM@w+J8~16y&-dIZt~XQND`G0J994|V zx7Y>9>+hcac70_^URMXO=N0cdj#RzK7RoPco6Y-r!cQgg9`$hF-4n1O`7v=Se#`hs zMq@=vc2jBRMC6U*!YFxd@QII+m1K2PjAn1m6hV2b%`AbfKwzuQ;%ccQK=P-k`tzPX zM3@&9j7e4%j4v}}DdAUcnG$OrM`%V$zi9v0sn>{%V7e=5qYJrTW9u0pMLcPkcH`#r zk=8V%y^fuZOOG+FL(lT84Hn)mzQS{{4Uz{b9ep}%JGs1mO4X8hv|0Sv%%Zh!xN(VR zcdFag&7;adjGx0zB;u=VBd@)3tnk%*o8vt`<9$g+Chp0vM@3V`DEBTchgqKn zthz)w7!+suWCAv(H@u)DZWUVl`>!Oh;6+JVCrPa@gqy=Qu@kS2tpr`AethFFd~!nx zO@Uy-T)h5LZkKZfqE9PinU4jQxF5(@7tr+vyP1TOKW;}5zsegFe@+?0>{@mEW`KXa zSyyNbRbX?x+&K(|=+Z%pF!z3j>^eVt{i;PgsyUb2noKkMOJkR&XD;gG`eN*U5%WTF zlhNI_6oSD0&sY&EXBuVO=__A52e@wJbJ&K@-7$oipHvj`e&qsYdR}9JJ@LuClgaaz zk?RSIs*#5{$ux|Voj@T1Cxl7|}r$B|UW;EH5$BwwFBt7Q0@XdYO^ z?=%mF@sT5L($ZWj>Ml1hdx!kUuJCnBE4o3G_%?7-L%|CXM#32?qpTY9W-RpS zj%ac694C(vw+S-#TOneUQOAp)G)L0I`;t?74plm~3J1*}JdW0MUszVHm73jT^b@=2 zF(A@+`|E=M5qHCI?BnZ589ulmd*8!j>-=X)_;)?2RyA;{Isr?sreht8HybXVBNIag z_Md>KE3N3Bn>GpxR>y7)kiwc?|BeIb_4@h2o&+e%<^KQ%u-cS5hfaGKN&Jfnewq0l zG6(-JKXk@H{%dUSPzo0@RYj!J2-yckaVyyG-WspIcn_8%EJ!t7j(a_}m2J9ifb|<$ zsopoup%si8a70HYiM!%=y#*o<1BcT$J;qtY+7!jbZ~oj0ei-|R|NH=HQ4UQYs*jQ#<4vS9IQ zNJ)wqKg)np(Sh2a>)47~b*bIKW__U~xIZ18D`4sIb z0V#femZqDrby?rThKg>FYHBfMO*OXpdg7vtEyYBIpGEM)%5|x;x*M?_OpWSYL3crO3e? zFsRa{E|aX1V<=K*TYx%fB1dkw(jrUP+J3||OZnkKiA>kBEuM3I7S(3kHGNe-LuxkX zMBpCxF=bsgi!RItAYWlAy|SG6lX{r6jsqrGNCYpugemx@s9dF?T&GJ2yR1aUvo8+d z)e+gAi3Opub(WQU4n~Wz>eQv(M2n8{YQ|@b_Km`oGC%&p{g@C6#PRf=a~c^zU^wv7 zS;e}p8~<6?8oqPJcK)Tg{xLxJ^WZctP<$&bQf;D~bt}5B%b;Fx+I&+oWa*ogmoJ?~ z*L%9g)m9ha@V)-Q7^BoqRa3!!jaVE8Gle}FSHx2*GH>%%w||(b7U_`0W__QhxIbSG z-5#X<5^jh@v6U~V+l_2*&(85mh3uD3e-GI^8Jo)!Be|uPX}8?#;XQh~o|`-m1c#J= z>r#DiGOkO&!`qPmB zgTde8Z+FXy5wk)J?aCt7Q1MW>f}%qU|15BE431L>|d>*R-9ymN;F z_VgL2e!tv4CwbS0NnftRP|D!`uG5szwBsnb>}B;-;JVnss{H=)4<_4=0YY4EeHJ+=q=EA(K z@c{RH|3r?z-)8}BLIfqTW5V1O(#;ilboIu0Fm{5qa$EkI^SM8+sSX&k)0;MY?NF-Y zVZwFKcs5|6#p}kg>eYAq6r+RGt9d{sM^id|;5aKWW58HQmN)UcBplh?2olCktG)xe zPzN)_@m{l_2_t&D!qCdc+p6p)*-_@WgFr&S19FAqX|{90lJ-715B%<~Q=zO+JtkB5 zEb6M#q{2AgU8d;H1q>D=_LjQT<6Ve&oU_t3PHc}a!UmfiWx zzEO_R?u%2*ksA(Emi2yMC0*lXturB|zl~3dtMF}ov9Fw>OLcy9M2TOc9Oa4g9E?lI zQ;%($*4D9%Mpj07;;5bp=uq1)y)vC%jPdXSE45mM!X~hrpz}~E37a;30RA`PUgfJS ze|^x2F8`hG-vq^6JF6Wc5)J4RGhf>G?F_`+$(}2sl|bm7>?uTN>Vp$Gg?+Zl_o_7< zlJa^)94+u2?>F^&O;?-&=L0bVX5a@q2WvrEj5YM0oi-hX&d8L~#<+&{-oddlTeQ|T zeKqwxtDf+S2qqi4w&0h8Cn0>h0?oZjVgtAOTz>Ucp75&z33#_ngVEzXLHFJ8w)tbe zlho{X_w8P@tvkLw<)1}?xvAjUdEpbC_o$za%va)N-*z!}#<(HP`*2o{W1Vz05bRt< z?IJ$7x%I%(P`8=fcf#0XTnb$E_+vLYXS4Cw-1gc8DAL?b)Wxw6k1g*h>^pNQ=unN%++jn!75VNM z*?SsBTbTMYY-UQd@6lGm$xdRE)+dc`qZ8<_@`T1d>}Sv6@f04VS?^^tf_O!}ytVLHIWx;74XGAVFdYUmBkYkdw z;(!e2^mQ3@vL30L1!15lX%HBg=b5u(+ za`Vw9=38spO4J7Rd(YIf)cOO_yu{JO3HpMW;~VcsM^!B;bko0?6zR*=BO%|mcSfJi zN6SR^t`&awm%KEV)q)1pS>L5GGG&~szcMpE-G6IqJl$k6_tn;F<%nlL54_;EDnnXS z15` zxm(Tnxq%z4u7ZD=4H2z9UnCx1(fe$rD``C{*DXWK`vD=N1Dc^}@!a({8IT! zTk(GHp_0M{fIwkJ2qZ$N_bq0EF6bHkI{QdowOrR)KaAO43Y-8S374dWk#QCNtc+T) z3UCB_QO$|qaDdi~ehwM@tmVvWFg)C-1&t;FTja8rrt}E{2u1Us#J`rr3rjKzFaG&k z&sX0`5M0EF*sK5Myr~}`9Wbcm2yMV}uS9=O=i0r^8`)uaj3b?26*R!xBk_&K zzxgOJsjJvNne>a(l~L;l0XiaMb#FI|CbxzCP`6#uoQQy;hWfMuYO$B=1eB z3JvPAr2jO7&S$cK1s`pbnUz+aAIQ=@p~m>cS<66l$PBr*^M{U#&Gr1DYGYa4@3Iyq zdqmn_B8?!A)Yh_8|C_@|&>Z6NB{3zMIyk3?czf78HS`IFqy;Ba$7Hp_i!Ew~&F08# z0)Ptsh)im`b5V&_*E0c==ovI|x6LEZzO_6&7dW7npV?`vw97?sOAI;?S7$T zSY;C`$*4PUhDOjWh;hi~AQnE^W7zaPIOn2^RqjslXSR;0+=EnMw?WRrg4XBMIopUd ziKbB*&XZ?tbFLmUugT-`(3~wgZ&bblTqK#hFKFX1h8Lv{2L>Gv4wOkTUkrfO3-H$x zRW358f!;@W0L-`e^fO*UAG{s7++}?RA|<Eno#}?!SV>ydl`rC?DCbvRNlNn(MjK z=&ol7j%@xLcfjh}=O+nxyx-JWu(zI^4OGx4n~f)P{xJn$`yD^*xd{;r+#8LlZGWBZ ziIenzm7}6ST@YhUaC2{CGX*5G2rnP=LSwd%+wjZ~nKsZYCnIopTAdloNI_0yv**`n zGaf^vyb6ze*rxu%Ig3v1IB?kN8`UiDR@8M__Zr19?(0sl@vN4I(_#^|E#r6X0dn{b z%BiI&c?W?^`F@+ZV@);K!u5?sqI)lAfQI<%XSe*JjVz^{6scJcJ+LDOxh@voDWRgdjjh;LNMar+oJuE93 zxKz#9AH5@*BQvt8&V*=y(&0|F_AY@F5Wl05Ej=$wjym^v>l&}!H1NKkmY=sVZ9n}} zPoe2;GwMk4cXZRwt;R1*by>2J1J`*A_q8oA-5rhg^m1s!7sFY1t#}a)wRkcRu3iA= zCeC0SF?cGeI~5wqbz(|*uW_@q^yov8eot686}q#)>E_0oZxk__D)U0IC4JG^305$I zh@KzuNn5=P$IlJF!U#5wcjq*15@%Lsa(WFogC%?xbt;buAGNjKN{A<2yT-EHW|SAZ zbv^g#K?J|m@yVo+%drTzRx$8AR=E%{dvm~XDw`-L{`vP$fy8itOl zfL}V0&&Gb4QrBV94f(Ya&!5HV+b+!+aKP!x(AzXLEBS+mro>N3no#n%%=gGE?O0s+ zfrv!yIy~=;fcTtdCv&wf9IQs;Iw>p zq(2dgfVmb<9U6Q32Ju1BcB67?eBj(0o zD-lxe^nZ1DUuW+kP^BSdu|yH-Wa?@rWOBPz8ZT$y#>yGq#(a&!9?GMd-| ztZTi~@29odZr1IjaR?r$j!%tDF${k=`VrR|6rnG~Ss2oZv+y!EPNK7pYY)*x)ZTxS z))6EO-f?@Oaq4~7cmow&4;0xAwtTK;hWQ@)$`sEu+p{Y@Zv|)~WCm2l>N)0V3V6ym-6TX*F&yU+>K74_ z7uCfhnc$I?Ji_l@_(Gu%Ol%6?>8KM2gF}0TS(Q;ygO-&%g`0hyah@XuL(x%9f9hK> zX8bMw{zYVeqPV)I5v2W%aKu0$%Ib=ZRIOAhDTep-%Fy@*fcITZII+6m7NR&Ft7=;149bU!FL{q;2c9!D0Kk=wbGCH9wRbe77r}{q$?A)TV&-19yGx zJQE5yU)e6d*WPrWJb_!x`|FNw(TN0s8D0?e>#FUyY`H~?<{^fup%jK~Yt0ZEdN=M_ zF=#1k8jaN>-(?Vk`~z-4Pmg?x@MKe$Tb%{U@yzCre=z8+&NN`|1SX%6&1W5!?|YJq zs^Dsg2K>vXxN}kCR`|OdZGmx=ucVe)73tCHyYFDupJg9YyWN0a`in|HLf(|HaChd- zTVsx)D?bb0mBe~zg=mv?i&yHk>1B~(*bcdVlI*r-;z?gNXMGp?Wq02#$OX8$n{a}+ zTLmQv3mHabB;B5mOiZ{?_N{(9N?YWL*L0DaX>s?#lIkujth(BTdib(b--hNK&g$sx zw&fMCL|ZvQg>d~IDYp^#pjoWS!7lfmHNr?x%}dHw`K%U)sV4=dKDXTzgm0djLv+H% zA0qRwTP!{?OY5pDNV&*mZ4S7;N<9a!&yhwUxMChCvtkk+g`W*1i36J^;)h!>$1h(O z>X1OFhNYL%s<(4|`80!Gvez+d*;XsmJ!)%k)CxQ znKfhG0M^f-;=InA`(a>Xz&)K!2-NZJ4sFtH4kHGCc^xB!$qI#`00^&$MqRf3+F1a( zZnv)p!PYQ-;5dlX7Ttnia$tfO`|Um9uM$d>h{S#1_Ps*{I9EyVITxh`gpMA`#Kku%+b-G8mfa(;D8)< z(3SpD+~P`-b3%M44`v;S_*DkB6kbWhUGDKORnQJo`9PZHuBGa)pcco{A2p+ZO$lmd zj7YG4T>ayA#PXF8Jr93<;B<~sN#H%IL$$?xAX|ezVnVUZ_lg@EL5X`DMcQ^B5!>2( z1yU%zzW|>ejpD-}=l}ZAgeLu7v;t2aNpIpSmwi0>t3m9Ze=*kP*)YPfdl*x2F88`y zt%j^2B(BXoda*0P2+3uLv@}9CpN%G2yoW-^On5*3j!Dxf{HX`v1uhx$5?RRdGNF@V zVqchoSKvvf|4cJsI#`k<6=Pk(M*imhuc8BPP-0~<2%#D(ag_KiGyKJAmW;Z zi^Qd8$@I**z-r!!sptrW8KM{V9!{MS>u9W^e}`Nli8g{g5+2J^{ZAL;#bb0&qC^A> zkYZ4%o@$U+sJLKytOR{;pg3ftTfgze>K$tH^y-?!iLsst=Tg2NGrFij0Pn{58OPdK ztUUUjH{-BqC*xxtE~3nk+GGvmY0MNVUw8L~?QA*y<&FS~jIAHtK|527{V}&*#&@Jz zSX=Bg^AxFZ=i{ou0u` znTx4~OE`lbL-r)S>#qDy%C_=H9i)D*Ax~~2_P-Ql{0uS@@*bg&%Qq554LJmf2qHc) zz{$GZV-HtmvGYio)5w#9(-Wf)sFqUF@%J#5PKamOVjKRM+@=|LOZ{Yn+wX_=tiZ%G z+}E9mtNn?crGqaf)}p#|jY&u`cgYIVf6VPfEP_jE|EA(I90-2se*pR!eE*mIzA0em zX3x2ZWlDGA_qo)1+t zv{sfgvVG4cn;~slB;&iPQMZhwUm#{F1C_z6X1+qDpBJfA=FzXJk~G=l5#&6A6_I0Vlu&KuCnre&+y(%E08CQ(qk!DuRIKzNU1GVTpV@oi^c<*? zrWy5$jpEhbpwxP|k-nsJoC66xpUGUTo|FwPn7_2M(z*0^pzG{|q;7mOp?HN1@yhMi zZ5Q8|;Zvf<^3fJuaWV-1sqw8Cb@=XyGGAY@-_5gX=P$cEWpo}TP!5Qo2DTw2x=&fp zoGp42y$|q%)sqTr-jhbY@3w|TnrP(F7!J%tk z2nI^T9%A0bKePonm6R#IH8;>%NKW?FOtY9TEI@^byn zc%*F@2X1;8)t8zc0R|vNh(uRKw|uuu-usu)HS+YKodJ*3$X`}XSwu)WT%2B0%3J^Z znM=TiKKRLDLm!9$`Tp*M!1ALNzS5VAr%IZZ zUh7<}1BIVN82K`mO0PF2C#b-pc)soDZ*obLN|>B?N_Q27EA3i59?YQnHr%CaF?`KK zC#gG<%*py^g+`PLWgPQR*soHQMG(0mlD9gFG4v&fUi$icbah(0bR$$B^A_TCEQMX7 zq8MGXn$J6cF(%s2o|w}R!wOC-%Gfpeq1d2KeMJ-l1P4wsY=+l<85altJ9kpfjtOh> zxyMP`94C$!o_-@Xdi?u#AeNEJ#!&ZbPi=m|Yjus}82_4GMa2LF*S;N$8OWp4JK%_U zetO@hN<%9=n#uv}d8P5t!WuWGwDpoSrr4*HpBuRt!LkVhRge;1$zA5M^@ixJo<#ic zrfuW&W=3Xy;g_Yj#fTp5A9``~zmX~q#Tc%SIXNtfC7fGn)?#H5>e{cPdOb&+?VR68 z*e`d!bLU6YQrkQ-W-6cp_q_jU?7q})7pRE%PKFlf28cA$qvL&|ESk>o7D7oSmJa?}bub2BYZT0_3I>eQDO6|CS@66yWoT+pXFGV<$BKhp#t}hx+~c$E_`vR6;1C ztYgTavZam6lERD_J7XP$?8_^PEJ?N*WGRIhgTah_%bK;4F1I(ZMzhM#v+x_z2fB z_w;pd8JjPe=WViWSNKrAAHOgr%3et4VvVF*yoHr|Ov?edC3zNcY1IrpO)rtnYB0vz zZbt0deUZ6$s+1D$Hzg|&<>$NH;+FpNldfoh{fP;v$!*5AOELP(SB7FPCi?BpiMAA- z=nd*m7zk4GhJ4ha_(TXe^zS{5QoTJIr6rCMK zote;k>#~pr;AMD|!k6?HSM`#Io+7e5GN#|+?F?-pNnGwy=tdbd>VJ-4s7Urd3=9=M z1aS?An`^L^S<&dw=jVi%HGd0oS{{qH(fj0e;a$uQ1@)mY!pJfg^t8d73};(P;I9dA zxJ-flO=9~9n8r3*(Boj(`(#@Qd+8pZrnWQNJFmsH)`9HL0i1E4Ud2wEXXGX^@kl3} zc^YfCR(|$(=M-RJq@d1l`_CvYShik5_xoDQplA zGfEVmtMQI($tob|fFX);8Js*8?@r4Hu;}7IfvF5?FBn;%LN zAD1o=2=)dH?u+JQn8tc^7WURagZL3 zm#KIkOaYB6^*)F9Q;3;NW*gr$JT@+u!ONImY`tNhBWs%tWqlF(w(g6i-R6R2ahMHi zGh+$@A%@s6#_Ff4tS;Hz9W*+fdnk_VV(aYcx(=kf#EN_&rS#hwI>|PAlLQv4$yQys z_K@{Liv)+;m0K??l>5GZ`?B`fI!q+R#Hg>Rtuh{Z#FMi;)^dAG_H!o#sZ{r-;g|6@ zi1Dx7e}f2rOfa>|g(|M1SGzz1Emi#o;DSh02~8v$JQ@b^+uR{wc}7^8%fZV|YYN3} z-#q^_^WCSmm7i>B{x|ha{31M({lP5xz8kwYV!blpuHRX;1+bxyd1B7o3_IMXvmA|4 zXI~>_T|ep~dqp@FF{gM}NJJ`jKOyX!3M@GN(s$j~2T0emL!sp>GZ5)*jl746LX*~7 z+=CIReVppLqi0%P0{PgpeeroKIk`CAr=UW!!T5Y74GgK5ET6$w>27rsBgG3EaYP2A zNbaFHox$9eGE3zdu+Pa~CH9`ltnG2zHQhI`V5shA*kI6S8iPzT;d;!j>Bl>I^8;Xx z!o2HEaRtf$F|c4_g2K)yF2umz7EC7virf2ha$2VHGhk+_nKsib6E~qSy^srT(heR= zlQ0KK*F-Z6VOhQ{KEJDH(3!Z?+0ymaD0Zsv%9O+6CZuUJlEzFU1iHPTz`TI0G>q_T zE`IZQ8ZTzmSLNPi-?~!B6Roj4xTcYN+mb7|dqL)~UC)q~tYe2@t7MY4`It4ZlUMh> zyG7BR&bz@zM2)I?%!J_Sl|wUg&RNavKD+3ANIKIqisp7#gu`F z9Bo%N+}i#jCh+b&sX_yRHIVzDQ&HXLZGSzlwHD#7hT;l_F)?gQ zOt|_CE&0BfN}Gq#DO_EIWijJvjwHn(QcATNQrlSCqkkG#Jo$sW)wn$Rq)6wRR7YMN zwjuG)L+_P;qb}&!mul{OkF9VTJ?E2La;&mYprDvn1A?#$3vX*^l>ko^ASAC$a<(d8 zF*FN!oI&60%_o-#@tBm)QqzSxs3-#bNp&x+o@vB zn!FE&*Qj-eAndK>RAM`*2l`_pMtt8eI#mlSw-KZi*!qe9{hGYg2~c*PV`FrX&PCfMw;`T{J#!%90;nlfj|d^B81 z#*<~QB@u)W_Kizv()3WfSH@4*Pm@w@D9a7b|5OuFqmc)}w*#afbS|nrBL9V${gVvF z%HmoK#{L$&B~eKYTkMV^!3u;_*1#fyI0I-4oSULk@v`hbm{e+)=#V*KBQmCsdc*1r zFwD@PmvV5wbE47uEIu3bg%^D1xPZu6%U>SSjWuPAxf9S$wsY(l$#UA6}DYFrmFrm3zvz&){cfE|}Q3-x_jm zY$g}SV)Wel*l7I2DqEDRen`$*v2PLt7!(y73@?DxBPw4*=TA@B-hy(IK%Y2EXeq^R zyL6~nv>MXYRnCkY^-ZTME%fR^ByCs8kQmUcb04Gd#Dx+Q$H(Uz-C7FZY&GWbzRGfm zm-U2|;F&OVwtznB$K98G?&5BK(2MUGW4;xrz3h7dB{qKmFHrIWfdQOe*bTV;d0^^( z8ydFhVpk`@jUTs9EC~i!X^bXm^ikJv*~UOl>u6T!f2s1nTK?5xCZvTNhDKtq`s-JO?hQNnZ4Dz`56Q{Sc zJ1}zsJSl;j5Qxs|VrE)LojTm`xprz^yyD^W*Jhi3n0}icn<&mc43@q8)!9)!0ty%cq>HOok`2P4~l4BftZIwS+y0T+@ z1Bg=4&d2F|EXcP{9Tzu;>{7$rgKR8PjArn;4GI+luRX?BANa7Lmk`hTZCKt$IPBPV zU9jnEMIO6%%wClm?E3wg%%sGT<=M-C1RT6ErX#sr?i7mZfTs5In2)GQ1YH7W7ahNGn zR{Wok*?*ecgD?!0>-IFH-=#gz%yHgq`#w^xVt|#Z3~GX`T+mola-;WQtoB<*R!zrS zYt^e_;>Ge%zQJftb>lO=VK9FrC}ovC1_LWqWlGGDwhHcvsNxKK*~?0}89z!6!-BME zLP({4BFbhTo^PLZNRD!^DIi{`W**KH8_tV#^_Qc}3};`>SXnLH+?iA(f;|JN8XbVv zA_i~g8M9%3}llaana?tng!39FcAsTE*w~Yil7UQLxNusZW9zo3i0mT1! zeIQ%@Mv|#DtS2^x=#|0Df5x2l#@yCx58=w#ra)RjAdQGg%ijSn88q_kGL_~8Q6nqG zRmxWLJeNU?E}DL3^uZ;x`_k9w5>Lz4(K3B@?woLoK8RP`h`H9-uHmoB98%o0rG~%a zw=DBPUhx$|0~kazaNy2mcr>xu|9Mj4@K_E$Wz&C}!CBYKFOeFKD@zd)$ zN|ckp8xp2w$oMlBw$pe2a(`<*x&0T|W1yd1LE5%)NgXeH8G@R?ikjgj%`_bIVhzDc z!FE+q=+ynhF?~>0{mP8E-&+-b)!8K3H|r~cMQgn<5gcr#g_?xG_z^5MWVTLhj|Uq< z)PQWJl=FjJhtfYxq|@(zssfo;mLDoig`CRK8n>+%pj#~gYur)SpIhC6|}_-b}PyIVb2f%`&AY`Q+Fw)qw_n6>yVe^XI`H=JCJdXO3X#AZ* zUGVzfd($~+6Q9lv^!|SV`@(aY49PPXU zGYUE0(ji|cbEj&>d+TkUcRY0}iSui?4ctJty;it~2|2p_vBjfRULth;Bv9e@<5e=b>q9`<+}@ti)GV~KhNetqCDTDfyqUtfDL-`Jb^<9#;f zR;zZG74)5yO$SqxGO)ma!&}qdl?}~Zd%HHC5_A7YY;B&Xz6R~JBs1KF{y@@l+7x2z z>!#cu3zD2<=HPKl5n#*LrqMImxpPG#r%Cm85#NkC`h< z7j0_E^w04*K^LgexL89RJ?Y!a{E2{`)XQ?UU;%TY?-?Rk(AsI*wj%*;$(RV3n6p9Xqo?+6Y41{NYp%P}lz2pm_?fKd&=hAr*NdNPs%%qd$UDz~dQI(`wmXdg3qB2A86?xMRI?UMfR!`_H76l zR=Zw@;kn-mR|MRo^_X433dwq28FL(OZx~^!Tw`i${D)!GTqSr$1VT?H1C$n@E^qgn z_aWmy4We$`Hhf@y3z<~ElE+dYhp1V$17o{9W2l>>SL)|^zg$t_J#-P7)F_h++LA2j zi-(y7LI`)1k6hM9ot7<_vP+Pj2eQ`e!OwTwP zAOG-1rr3H|AsI)Twu$$vQ%`-x_(;Dg>yx`r;!m#QkSWzP*D#|LEU;z+Q(HC56L(pV zFL%z!H9C`bZ|}XrralK3XzaAGk_l#1UCHnOJrSzOJ=gMd7tKnI@`0SS-)Q7IV7oxi z2{*I0SE-JVvl^0>a$^*l=+9TAgH9LH@{nNNfLEEOZoHLks?eaA?c z7jw3Pppe%Ckrs`*7=0Nvyhrgx(s{>EV!WhfZ{!Wa4ZuOm9^?v(aVI3dfhl*{40juH zcJsHr)d1g@M<%KR+~yfSg%J@)pS7{sX4I0eRfOoZT)b?fr#PVmE-sgB@lA01Qu+R` z6&Op+gLt;Tv74UEk_~ZHYE)-jVCVl@OZ0XiwCO|lF%(coRtUj^6<*UB$Ww=yD5D$? z=pq^J$9H}JB`NUs7&i%we6s#DDj!VS2v98$x@MotfVAMf{slDw%3Zb`B%NNBt@!-~ zRD3+gc_eRNL$hg0pH>~d6|C!&SHtgv*ECTBo(FOUe?2rh3x-xeBJ0>(Mc$;E0sxFA z@B}Qyn@0rJfpsBP@WWn-%t+Ypgg4sY?hP^U8;)od=Z^sUsTjCwrFOxh@1$S-R(^R4T-N~Km?ugt)9I9qQJcrO*x6&)nc{Fc=P4q?g0KUEplbEi@=9y z&6S`<%GCEQ&!3HVWC4TukY(Wc4ooRALOnha2iM=9GE~c`85X~UV0}M6HE%l1BDc0S zJ=By_m)NxZmD})j+GXz7vL^f0(#!?$?f<=)KWq6DAHL&0e$^buUyn(vN?Azq*FU?u zr9OvGmAgX}qn^9WYaEBFv*w0atON z5=^1L{FmgbZ-&XU;)f*8aZx2(=~){7E%lwCb9Y#4HmK*@;AMO76Vqt5_5eO|?DQd@q?QB4F%vx5grzXVxwzxfA zr(Qzt0|-uRtQKD2bLb?Xy$|T6KpE3uM-$B{qtK(izsC%aLkcM78~cLHJPLUyhgc2+q==PN(00GF?#+Y>D*P_T%)?S8?{!>i3;vcfYZ0RgUzRT@CUFm8G7ps?5VrUq`B_V?5-v!BpysunQLk#H?=Ni}h#4*c9o#Jn zV#t&CSe$M@ott?O{v100BVS+GGh@lmh}N908T|g}{4o$FRLGg(IBUs3P&A?`Cr}S1 z&cA;m5L(7zfk=1sFUnyo)9f4pd9|Z`@ekbid%AUMary+9xbp{#f~g7A<5qJVb3K_R z1b>2gv6I5H@IADU;o-E6gIEEFZn=W}i#?e1ihB0rsxu~XL<2Ttf0@Mu`HC8jz+yVv zL;)ZWJd;|VI3ypD@!0asOubvBp)ODU=aVay4CtdQ{hzR1VKcRNP>ld7%ec}4Vsi^Q zV~>0H;HjbLXX1+z(NkB1UP^s-M0oL5r)A3eJYq-5fgRQlH0B5pba3+VXSTM+fVNax zdEbP6uk`ws;mfCg0?hyjZ+hxVZ@q7D)qWH;;90L5#d0@X;dMdQywp+O{vBW2)(Ni(g&^Z5xR8?|do{s=g#^ zm%!moxqKnbB=QCFq-5A)Zf-+gOm~F(X;Oo|1R))FrRq7I2_tyRcV&;6E~+v9i6kx3 zB9knujK*ut-c#Igm3|6|G=wj#_q1aOf~wC|f4U~X+{+lp#BtIEn*KMNgT}^%hs!P;$X(e4qtcz%}(wVNROF=`h7@J#|o)wlXRaX zeQE_LZt$1Tm`i_xeF7z*-X^3Gg^7?1@4h5fq}_t2KK37{Z%^d(-=$KwBY9%|_j0|h zl0%lW0o<2j2(}N-p!UZ&!0I!$$v4=g+&&dsFd`OfzZCCM478B&y)jdjZe*IDxAySP zMwI&S)`o`9T2(I~wvwQXIy0|+dDu76Bw&%9sU_jVfIc^*GN?^KzX`8JSD>bFDHB~^ zDZx%@{apXbC6yz8Ac^BkW;+LR)Q9eMVP(>n%onM}@F2W9=)x~xt`T(5g`=~E+%_Iz z{TVX1pgeu5_}f=t>^;#-xd7o zdrrkce^_~tqYA1V_{p+wwQb|RR@M-u>b|m1W>%8u#D3RFllaZj_LNw7;#CPyZNCOv zIk4u3<}`PV$$U0I^lVR?v}Zt!s9Wzl+qx(wkLA zXIyl?e~Ah2)T$08sE#yTLmHm;1wb93`2+(js*Sg~)zWPksqU)R?6EyHlCCG83gA=t z(NoZB4kkRkwfYs~KnFM6x?fq{J6;KmypLK~4K(nYze(LTRDl7T?T;ucAE@|$P|{&@ z+|_kqY^v|>JPcr~-fLs~y_Qun{jn(j%j6i=Zej9ioMCCm*QvY=!b(INTJ4KMYeLP- zuT!VGH-vYqTt*+QPFu&HV9~Tn! z`fcuMfPE^z7YmA+)Ugb8Y-cL$hS1P-%mK& z@pZMi&VIRbz32lirggP(Add=j(*iYWF_iR20gn%(GB6uHC+o@SU(Slw%}avGGsbOT z$;tjU+)9lyx){-8V6k0y)ri)Gu5D`x13UvWyH%Df7oY22|Kp7GUZs-ez@@6?H0&Mf z#$AWQjrYwp(`ZL7gzNMEv(0{uq#i}50L$`QD{Mekb80{!>8!Gb;>)ymDFg6|sLwlE zzII!af=LBp@snphrH_iN*lpFxhNtr1kXC(LgDX|?*OJ9o16Knvraan=LeqK$?kpXn z{r6OoZipRLeAK@*9BVf@a;DXw@)>LjFY7V6l_Klh7NDL`{VK>UGa6~cxyq)EF^4>J zu_5?Ig>*&!m_PE)Sc4$u@k(e@{*oY&5h+$#lR<|-)nRPKpGMabYO6V0#l>imZl{Tp zs_`E&rT6yk0LZ2sjO=^l&65e788uP_m`3e4272@oOMd!k@ZZ|=%25roUQvArBkALz zhuwX@7i6QB99{(M^}esgFueeqx?F=2Sj}Pk#^}VK1B6sc&@YjI9XJ#6?qQ^Y5Wjud zMQdaPW59|8r%Usr*+1G0#1vFBMcv&(rr7#U-_e%x~)N^Im&i103CnziOhuL}rO&_%&Cw zSfm`SM9N!x(M%7d8K=qi!T$Y&Y`nDDC_WEs)migcuu_J_ckEPqZy)zN{-=*6pFE|{ zA7ef{CWU3g(26rq1rMu?p*>Aog+*X!MHSWy8f%L*bJI^2WsMsk-?AVpQT%1@HC!a7 z^Zh!s_1z4+;@J&vwY(}+&dR%A41`uMTu4oe@9O2iVoNb#lc&`zjRG*Y_MtG?p(t#H zw+`}|ZcBF0v*zXM8VrpeZ62%+H*bqKcc8B)`y9e+4eZ>uYvkOU0v&$3gHuLOvx6|R zGV3m|-eS`=f1_953VfVRX<}keJ&?7pmoFJp+gfwPNMJ2ONIS;Jbdtvt5;2BeJPvrDREgok59lHIE1V z-IazfnfKADkCz#EYlPd;>F+3qRfH^hu7ovzFhhmWA-l;=Sq8iw-Bx?$X5ZCJKFRIg z4Z#okrSb_Ea5PeiY)bv>dvACN!RKm);|va=k0vLz{sJ!CzneRdgr@_KMai;>`u1AP zb{RCiN=Hczev&RosSqe(*WA4hL-Dyt`E&zp{m~i8Kh`zyZlGh}lH2}Z#?}0S@QKMs zMH5c@=!a|Zz;mlE?)VTuU=K1mBzj1Gl~fnGFG*&m!PwQ7=3!>fbFZV zf=7P3s-(KWUFVX)>Z1@aDrHPpx=_+pvm!t(9`smd%Ebcm#e6-< zNFs@XK^^<}UnmyC3!Pz84v~Q5;sAFE6XPZCRSDxV4*LW`V*%=6qY#Z)Z^@=|flwDk z-Mu7+BvXtaK~Eu1B1F*Kom$C7PoOT6Uzwm2ivx-S$3mK0uk<|I=EG`MtVEdq-T-de zEfgJ#^Qy%(3`oREHsM65=JWuYj(_oyS}JJz_%Y~Kf5~EQu|BYPT^&-MGU5}`&z&=I zwL-RC=!-x{uNdpB>oq&o5*eeeM~c+A1paW3d40$OEslaz+=%fWg(rX+}HAWX|hRgWmX2cI0gp zpOn#V!^4s$5XI344mR2yK!6h$VKvu}AGho2b3dBI;@j%vz_pFsT|Lr(*e3S(k~^1` zv|Ci(61{>c<(Ipfm;FS$p06ZhZMyHEJG$KNrACc!-cMzlDtiYdb(Suhe=i&MdF(Oz zoXhGqP~})Zm+d@kOOyas4sr2&_3cz`&Q=zK54ng&MPiY1^0MZQx8`=_sV*z@3vHz z!yG6vxI9WYzX(a~JZW#DK2371Z)Qi~qd5?YUlSqi$#Wq^suu9yO{Z?mZrY^k&f!-R z^ZjJD$yzF(Qg;iBBDB#xCy|i#K6~ao(uY22z%M`8fzx7kzpW8b*^CfKL#SsOFKasz zyZ07J6d#l%sq^P?q)q2JQlF_ig;QTDtbxqTSEPayE*fiw(K>1_JC|C>6q`X&-cLm1my-GbJt(aJgYWmiz6hKhR~x@kq_Q?(flKkB1j6whh4zl z&TnlbPuNt=50)7J3TrEDtM(bZHi5{Z*iQ|t8z=A9S6qEn^^<={$4_VWcS%*&#yA3* zmjW!=6lK-?{_Q+&G5d9=?^wcgpWBJYXi1V}+j`&DLUcvGt{>hMiG~7QjR>UIe3cG5 z<&{Pb>7l}EK?l=Yj_Q*I&?3yZj>9K)LeC!9D*V&>cYA){kCytOc-@t%l0KD1EHG&9 zyPwz7NZ$G`rcJrvyLp1G)5PyrQ{z(ee36NVUI27H|28_JfZiiDt?I`ct)j8@eo+V0 zv9}eS&OqajjI(9v2@%m^a(16nS+e2zuGwXy017X;LY7M(J4pvgT&tM^Cl4Mb*X+pe zw_)$3(h4$+Vfjq3PN}q~0e*X6clfo`j_um~Yaq#A28$g2km$VkBXG0T)2U@oX!!E1 zsmk7WzbO3caODz{t*Ct+@LuXon>}5RkGReb$(qUGA_wP6A;mQzAWhk#QU5p}Vye$g z;IS*xidbV;UHQ0K z4tVrCb=K;zlmYIQhA;YZKE(zSe|}lpW4^G5N40MsQ0^woyAiuKzg1moF?sxJ^1BSy z>DAdD7tL+r%5IfYM^pu@CKFdaKD?YP)9aW51UbA`Iy@nNQGI)Aa5>jJ^e7F@=bbX| zZUItK-9;-zyQ0&+3d&+D+9c3nivu(e37musn-JJufM&==WT`Qx#dv0r+&PHiK`0ONlGr}ZwB7bvghse)s zssVR3&^uG(6+w1ev5I)7eFwS_-Pi0`2Ee8*O-q)OCWT;AqoP=Sk=y~_S*fV)ZJ0qS zWVv0Yfq{m`c5k3kY_5DZ@4Kjse!hJ6apV|;v;aPb4evh2wc~s9)#IDTR$fF<`bK^s zde7{Y!sV^&f+WUkcNAuxQ9c$N5u7R3PlaC)%DZt-VPY}-@zuRN<{|xO6hjx_wcQCM zW6F)$RIWkzczIR67;Gvi;+Fs@VDy3JF&Y`&E80%}+up!_xuVH#K9_aAPqVM@I(n*o~%2+k+&Xq;)yp(rF zX;Y13%BZF>8D#L#)(o zlk&Q2biJ%v{gCl(3*7hPe=N>hg$BevgS7iBv6;hrMva$a6KEf8R5dB;L8u1(NSf5P zKY@%bOVbxq*Rhzm+XbK!176-eYbuR@RbJC8iXy*ZK&V?+&1jSq-(X<~(U!#W6}P=@ z&LcEOgB?p!bMGx{8@YG9i`v2ohBYs?6?N6K0Zo-AY2UWm0sghgt|3n^Oay-0l@LF% zJV9Kl$=|sJeA|)lOrox@0j#|gDc-Au0rH~z&&VUrMk;Nph~({+B+~3wq|!c_6C)L|{O z@$Py}iu4HN(E8BN0YUAdg{p&hw9#-bBp_0?(TFnf@0eC*=hvoMX3T1C=80$DW=-~^ zRDD33a%G{OfAdzf-6=y_i`l@r>dBbglyk+^#EmiBMB&*Xg9}IU9_=KvrUrvr2_(v0 z$;3U+RQ|~_^Omx!T``GyLRg9ZGpn7fT&BOeQH$F@QVv^ZnG&xkPF6-1S?&SuV=MgI z;hPa|4~mGK8nL}o@0C>A-EQ8IBssM-l3BeS72R}Gqb3YACTM7`J$*PoYpwRHGB5(K zL~nesep3?KfPAmgYmo3t3!FagI$G`~x+mUXX-w-RvKi{7!|A%{ma3bXH!euJhz`Xc zKH2b1#FO&2MUn6K8^IL7l5{TD#Qz4ag{^wIU9iM|e=(dPdbP~6B>dT!j_Cuhk(Y|r z^L`s|*`UiIJ95JXTeB~f|DqQka;VXzj;^AiP}o@Yy)r9#sV>vh-Rh40on$tpD~ike zXv*I22WuNL% zxp~2goZ}|-r;sX2i$F)hIg$dS{+;|OPj;lU%HAY5djlft2h;SbAE>yfhQNY(@QB6C zTv3;#YY$wXV|u5x?wdZ>Nn`^;b0fU&Twy@K&Z??HBcdhQUuZ;@Is0K~!|3_=I8E=q z?L|?b=y&A43B;BB8tsFIbbaQ%$(YQ=$z1ww?eNbZUIlJ2g#dHoYUDaA$xu zASNO)Z9FJ5rGL3nEgqD~%oq!o(RS4SgZFS_y^b|+wuINc=8_F$^m==aI4NhLBi=_D z+=47O(Sts-c$7sVhswRbf+lWGV~Og^@U#y29=gi z)kun+Y(RJ^o#9I5>Rd_oUI~BJEALp;5iU!x{+AEZsEMr5OLih$$k!lYV~x;`G0gZ^ z?r_jJn29I45#;)ni)Q$GAu?h3wY`T+`Yeb|2E;blocSD}8J3+`{jp$WDX{^O|2Q1q zsi&-+(mQtwnUcMd6w5@AOY}v{-9;;#*SQ$nA?+MSNtXXihq()J5rQ9l5z7hs$s|7= zR|EO#J)m-?$THfIG?d$Nq30PT=iUtDh)Pu*uYMa>>aRLMx4rmh2lM4V0@92|x6|Gt z$CMxkUUnmwZ2`eNgs+hgnE8jN?Z?2qrlgG3nrC?Ht}glZURbryub|$%mi7Jl29C|9 z@2XDwU$(=aHP`E(2zfSD_1g~OYU`kSug&yb%CB;*91eoq4ysyHV` zwb}H_H}rm-TkHF^uj=zSI7%Dm@=Du4j1Zs2VR4Q+sW)U6Bo(l~4^;X7Ob7Q8ik*&YzPX3rpjK;{Yr1IEd8DYQGAF(CA&e-}a z@T$Vh&Ev?P=^dtzi^>xkszIN9*0=KKlH|A5Zyd-h3ux46o`_`~zkge08Lw)6T+g`M z+wY3D16?EHag|JXW{$6Y&%=syq)ZwM2fqn5l^BRn(M+E9F&vrDUT*D;5EkY{;+6s@ zP$phKf?&-OcElT@&~}anviQqRA>Cx49+aM*HHy2c$!<&{`%6d~R-@1ZGr2$5S-4Y! z#c$ZxH(jTSASVHJuyEN30z1-8s948=(Kyeu2^5w99o!9n`xL2`H^V0DOL=$0@ZXjM z;0@%ct9$)_pZ%4-22M43K85W!90m@9juDz4rPR>Cs&Hs_XFeZ`yxs0t#CrxVg50@4 zIj3}S&bzxuvc;Dn0eHQc)?B?1Xjv$fO89pspYI;cGf9m6Jd^zTa1$K8y3O${CHp?s zz<)V{VlVvkBvR~Cyt>L%+Oq?=Uzi%~bw)PK!XeA(60yirvS_qeVb3Nb!#B4j_L!kE zFtXG+W^=`K>>O1+L{MPIse|xTzLCLNfVagkHD~Coy6ZM~T_7D(oGVC8OAc4nt9&(h z@9g!S*;sS2P`vdGv>a$2zFRsBG?Jb0H(MKG95x#b5)-=bDdHUhR$?bmFI7CQb6YTL zon-@?2TX*YdAt@bd)xwdnd)}{4kDqs;DvbklphU(*U`a#BS-lqsJnRY=bn1l|IA3@ zhtf683q~Zq^$S6rNY@IThMe8x2T=ZGGp(g+I%AeJre7j_@i6QZ#9A ziZA~N+4EmXLkcu-g7kRe6u~}rfn*KI$@w~42?w=m>C7o499BQOPQ2awrV()^AkG4E zMjIXJnN)s&CCNpfBMvKnh$pgFCl#DRvYs+(K)5T^#9R!`&C1_>-vhHTz5Xz3>>NNP zd)qZC(G$!N?C_Kbj+FG7-ZYh>J6wVB3fdE8o9{#MSIMH*#4LnJ140G_uL75KVj%Hx z;1aIN=NdL!Kstk}UUu97U#xKOPJC#6cCQoxc}BURo5(=mct*D2l#={9V`}Su_GU=s z<5_$}v9N7Em9kVN0#HXD`$P%Fo9n{kI>0rq9L?o%I91fAi;F$?H0V_lp2F1Ja{_t& zP6q-VJocB&;1&`~5ro7`hftD~M{taa!HAZY8lOj(&Ng2N!(YkY`U*wmoKbnPiw}u@ zNRtuTh?v<3SS#n5*faP;&;ZW!I;Qd)KLLCy^1>NUvJBsY3!(U5URUyZ^|=ssrdr_b|9kQ9Q+3!6YmH&5y#@lIY7kt2CO-FXimgbDuq`jVA> zBO?FBQwkGk;_Ags{V8H3o#|7^s+ala|2_}_eO(s}FOag>=EVJNYrMd|s(u6y6Z^!m zShd;%DM6aqZ!j=cwbHGkI}ZgdjH`kqoa6DCpEb zvDVt>kY8n(b2UG$cVOYVNFFA@#O>?ft^DzH(G2czM6&<4n-RrLx?+~lvj3I0 znT9Z@?T!E^OKkZP>;C=<`D*xy?f@aCLw`>j`Ap8}V2l zB_f-?@%OkGgnO`l{O=-DI54P;2VKrFiGrLK2@7U$k+p9)Rf2x-j9Y}L-g^SNTy4ty zT4(s>^w93R#%tfbO`gt&Xg*DFVIccbLX+6yw^#(}D6T5yu5$$I7BBl_omCuqHbUZtr&6Zs!w)Phax z54o`rgc>luSCd!>j8AP2NJeF3!fWJs!>Q}&qXb|gm5qj7+RMo`M4)YEp$opg0fw&b z+$fN1KYd{RFJ8V}Qnx|<=-*EYQ#nW_)RVF@)qAzuSoDL#>wYw!1wh9Ib0Cg1ZfF$D%-UwjRWNM&o8o44e@_0frjQjheN{Evs2wJGz0H%J-$a>7Y$8htsy%B zHGllc>$uQP5L1DFZ%#aP5G3WErF#^6@{2r`dNee$bPie#81OQ=1N{TO@cBsSagaQ8 z;6u$fnyt5x;YXFgjU~lC<}_vjzL;<=>~5m1hIHUz8k$K|)1ZYB3-~I#sI*u&#)6KG zhNiu(p|rpBH2C7hK$sZ2qnPk7P?jp&OOY=kz%k9}goIJ)P@)h>H}6E35-(kP@NEWl zK(iI>F<1*eS%FC}T#`IQLv!82Y3i5#BX5Ij_~+YHZA2aJGJ%nXrpcX!XSsRttbV4dt6Vu$rLtZP zB@C27wVeKAy)p~JB=D$-MTX2at&|j>8C%VKMfuyCi{LD#^ zb8)WZi4dur0@TC zm`GmJwN`#9QKIGDvj1s@)Hw>X&9rd;E>v+?D&fdwQ4P?=iqdcad_RY2fX9Uv! zUtY^B@aZSI4}FYmYw$%kMnydx2gSinsT!0+-EK?+CLu12bc#xJGZX6pEi^Y5J;*G?*)fB8uwq47CEF3i7{BBu8hh~U4{SG2mjJs<|W!a+Cb5{ zz$sBZ1`;hkg^o6&cW!&A)aVXOrAD;roq#WmExC=kU4pwN4gmkxqH0~N{__66_CjoC zWQC>t>ef72oSiv$Hm&S~=8l)&j?rC7Q0UYD_jg`dV-M%Y6WzX@zibR0ap9n&3hQ4M zNb}tenXBlr22d9A92ze+mNv?U6`b>7@KoL!1PGAqkpUy28K}`UuP#1COjz3XX3=FR zJ3qV1<*PQj{r|Gn(no-Fu*+UkV3JN(!Da%V`s`Z0X=&)s+@=PTL7{77X#Fb!kRzir zIoL(x3l)3GJ6(t;gF#D zj$&9i)@h&^qBeLmeJ1m=BxE^q)=7MMwqg;wtO9JgMe{mU5?f@CNG@B$S@)*X_Oh{` zi)lHIE>v%a@64vMsz8%on9( z7MwCE>hmDv(PF!P#ebANP4uf+I$gyaaUH8kq&;`pYwwVO;>eV0|3U(BB~PYT%Hl(D z&^x{|JMz8bhU`ca3ETy>v=;h9M&AU7oT%5XKpNkfTkbDiCmI)$*BbWs=$ia^J~8MId7oD zK&~G81V}S;TFqPWKQtLnkB}6P86;M=d>!LD1x6b2cAOx9pWWf&GaA>;_fw1ROv}0s zlIV|;RYl7o(N$~wdvEWkKT=)~^6W^6`^+>YM75ZI10bM>6PUDo9GMOUoeKxA+@i^y z+?0Idy&yr6G(Xp9JAVD(eASaIrqI*R$f&f6!aK(eM<7S?H@8Y6o{fd!r;j76o*_2m zpHb-A+g?;W7b!BS88k#$*uhaz_$y1^YGP%R>HHNF7-Ts1XbG+4(ZU!VG=4m?R|h`6JY?Qioq=&=-&0xeGpGkf8idD|+Q}Rm7)g$Y&OX^)I0nQCw2&l8Ehd z#;v%(8W@n^B5*t+XNaogdq1B$myU!8+N8K6qV3K)xQFA<6@s8RrKS>hXJeDP$FRdC zv??d7y1eg2gN~RZkpW{`DagF0fW25sYrfDRNnrt zcdeK*S`K>t+#}f2WwgR{Yn|9@Wwb(e!@*pfi5P-m)@P;~&kgy|+(!dL%$Fr#pH4of zF!Z}+9*f+*IYoK}iqe|Mb= z`=Xro7VQA`OF6AE$F|c$J*${49}5VyG$?^7eP&1{_YU@E1+5ru8rHFbR#oA<^=rY_ zz`H?@1xf8~Rs&6ggn?{GrOq~zn7&UdBJ_6ecjSEQ`*A(L)Nc+w91q13Q+$Uj@BzmVKZXIimc^qgqY;*9n_ob^&Cb{0(-xwV3!BH z9Iy{7X+@6K3;;kha&gli8(K*##d{VES8Cd)}0kNsLn zE5=A)?fNJKQ$>4Lcs$eKjzrNy#Ujw!0E1wRJohI(QKMBQqi!dWRO|T8<~VFt7kjgc z)`WHon_fk$1{klELE69%59!Y)N-z36XRPC3;NyqCm{dOp|%S!a>!-q-MRVwc$8&67^Mrz`>mT zt=cf#zi{;ZT7Nhdcz|CG{}Z^>cq~o>T%@BqFO^hZp9+A5@9Vf-7LJ0L|f%nQn#=0 zRWM)5n;V=g6;B)tICC7C?U6X`;&=;0-HbHdO|lXA9mCdSpkM;)L;XBVDz@ybXY;bC z(Cg6w*AZcq4jqK3qMy8>1UK=#A48qn#Xvz)`PIBgs@&0-^-*226&O_n!S@ob-3_ku zQh`C-`79iqF6c|(Ek3OdF8b%U7oaep2Be`WvOI1vOGY|F+1qkATr8L;QPlVo@E7x1 z;Kr18i-XtBgMv%<#11^0iQeI%@+BY{oEopS+PTB^tJXT0YimD}4ux*kCACr9HhoYeTRqTOGrX`Cqcg7i6H)d~Rt zVsw|r2({s973&{a+ccLMd~=5Z#f9Wxi9U~JM2n^8fDIX3?VHWt0-@#Vd3uvN)+a#D z9(e9l*v~E-n50L5mlzlGANcAt7b7)aQ*t0>2WO7so!~k1L`mVR*%}w!M4)DJ8+Fz5 zQx9rrJ1+|3J^NZx6ktzViDolR3RYS=+8kFlr>h^&efg8zjEg5nBHU97)W4gv>UrY6 z&a3Ckz~P=W-Fp*?A0bA7ggTHIP~<@M4{DfyIT)*D2KS)>foJOCDQ4t{q$R$T3kUVqIdT#dsZBG#Hf9imqz( zKn-n@*0G!Ijry4H=x%)5TzOk6Did`~?nPDcs9UC$E-;f&*5^x=F55ZkzPK3*1%W>; z%^~VmOT-@d!GCxQg9zZ8w5+2A1}F3?wGj?1x8g~28tC{>!3fS}Vw>sx$?;fiN%oTU z>xcO$O!9MK+7fO%MQO$%pgc{=EPM>3e7w^6AL4L|pc--<3G~H)*7NWa`6u6!3|v`f zk`r>hzn{=nl4SPYh^cBjaHUeF;32?e}-uOGSiM zB1`rt$zDm>%Q9mbOO2&uP?nJ8ep0d}SqE84B+Jl*k-f!|B`VB_P}b~8_U%3Qpx^WR zzyJ5`^E}ebJ@=O0U0$yx=arlrBvC)e&XPa9Q~KMbzRa9@ zAyzIh7;k#cTK-$)*31Wx39KsQn3q|0@s?U$tLn?_bk!ISdNV#vT7(1_I6IYRT-lElNw{Rsihv zd2yH-BG0?`!Uy;78aTIVU+ET79ZjL2hQkh7^_KwDINfB&0ibez)&tc#{!8dn=!%^S zg8y&xiPz$jU1V%)g0sE>dcmuDVnmq)n+4n${`=9BVdL^GEU zrOfFghv}=87_~o7qANB%4W|=IkBPpxfR&V&o}dHKY@|LGR&3;47yG}xt44@f$-lep z=_xc=A2caK?I2|JXru(cfDb{R|36ao)l2C~AzTEw%mI;e;oM20zJMgWF?nlviBv(y z1o$)XN$C4do49dJt)6V~>oFtr=Npqdgxz^3&4I=LRHsKDrN8tx`Y}PrRswyI{^tZk z5LDug5k~T+pPpM>^gi5HNqwr|+_l*VfBE?s$JhZk`4vx#_zsv zNYDG(xGr8iG)W=X?;6*J<3Hz19KJ6;<>JW0+Tt}5w{>s%oSK&Be)yPx=g{1k)TZo(#H*VK5r$N zFOHXH#W=kMSW>V&O8eVkjU9EG#TE0LJGka<=CSATQ`U8FnKrV~C3TkyMA{^5fjFTQ zG0J~!dlx)~^QZEtYh2`(%Uz-!(j8n$Tn4tNYul^jKc8ugLSX#b*CyxO>o?L))jq=d zmPG4H3K#VjN-nBqQMXRtkIkL(Pic0UwzPuYi^dMlBrlOq7R)_&=Z*SnxR#x@ySz3q z>doEMvCZRDigEcZTt5oc}@ixtC_w%@iUrR$kY&e5Bm0Mp40 z*>oEfbrH>hDiu<5Y|EFc?`F>Yu>s0Yic)+&@w~pxc#z~Y-TC6frY-ibjTOCr25R2@ z&Os<0$djRE<^xx|tW42KTjD9SMrJ%L;y zA=$!|F5AbJWVY1N4nsK;XH(+j2L^ujg{BlMf6=i6|4nJ4L^Z>KjoF_4eZ))E47WEx zibwod&2VhboS#B?;pPqecSXpjL$(Bxt|rU}5O>!w$T7OUPvZH}iOe-7vJ(wz7<9Jv zGj<;RohEK(L?qWR99us>K!MLDoRPHT*cT~;_lP;eSW|BSAFK!i(dsbI6V^qp; zOLUeL@n*P@lVCw*XuX6!t1nhuqWKSPRWc+mOMYMp+6njR_1Zv}6jTg8;1SzL)244` z?$Dcipdv#0yfq8zQD<)WCiZJy`>4`?K;ym}SH>y9YK(z(`*c4ORh_LmGR!EgGbKwu zrgqAInj8qW(*-&{T93Hw9Cvx{O}y#A#7zO2)-QkeqQ)DCnfft!bqq}JeC0d+Ifti- zUiZ$EwudYgyZy#g)~FIpb}2R?GPbPaEy-HR6j?z{$Z))B z>m36LcuU|WYQ94;sV)UEUj*c%XRv>N=7tjvAA4=LiV6weqg{#te-L#e}{Cx>Wi zc5gKdU(=J-=lY9!0CSFcAEsn(fR$0>rrk?8w~(bm@fm@2fzw&)YFRV#f(*I_3HmY@ z7YYSqA`6!a!)%*ILRn6an;8pMOCh^PLV=n?*}?@oqWwk5r9%E~(+$@bkiR{qSHiaP z2(ztk-zs&n z!U_qxhk5M?2d3EU-?UubIng+&jkJe zgfwI9P*RF{9#|LTtFNwI(XSa_R^zU#7N4VL@m#2^-&LtyC|ve=4JXc}!D!mSJ*3+Grp}H#Ttny6^`UMIWo)yV~G`c zcb^-|@0yM8^z%10$4oV(^Q6wHMS8s+q~3tKu86EI=y`|XxYP2lh3;CDW&e@d;VRXul78DhC9y8G_8 zq`&hbDv&gl7J5cIBL*%IK0a4m_m?Z&6jbC_nZ`peKr_Mv`A`e<)AOphE}kJ`5AJgU z7V6v!Gx5@#`ur}QLYR7UHG&E)aqf^_8SO;{R^%VuB!P~`^g!quo$}8>*EDAJ z=0wM&TVUb=#;68Dk#|hfY`0ToHm0{Vy~*ofm1f$> z*K>0owZ(s=5=Hd#sflGzAk(+^te?r73(f5|8!D6>igWd{KRj^3am7B-x4-_cvZE;z z>Q(%aztEuVR-d3xJ_TtG_A$?mnb6KK6SRmC0p6w5BED+f8pR;%rb|9bv{l!nLO`_v zeSKa0*mpj(l3TJ!xk^mqQQI6T=P;ikiSZ^vU9ahov-)OC^{M;|gRw(!ir#Y=e&cJs zTHM;-@0tY-M4s&SO*LoncOp%TGV3hZ9dxW8;WM&&)ORyxLt5+gJ8JowFZ5T8lFy(O!ddIB-ruJn| z&9)=iD2=e;MoO}zx>Tk3NcXmBtW}j3Z8+Au0<0al<#7oYJ_E$tL^wIH4wOX;pHVXw z8HUXa@1%s#2PI zj)jhu|12C04gVi137FI?mC7V)PN-b_T)N@eiuJ;~T{PM5un8piVFwZiYl_l+m{77D zM8KZm)`TQH?A-LyNT^lUVtN-C3-y1J9s7f~kkq>h(riJUCW}s_-PKl0I^s}}uUTx4 ziPNE67~J1Aq`4@zS@R>&2!zIxnz&RfR8EEFirj4MP|kFO`|VNRv-Tbi8Fep#RFx+B+2nvC!@&iWM3q0H;%*P#u?g<^j&Ea7oW8hI(;q#Cuy8ouQUQqH<55DPkY4u zJYna3Lu=DHhcYo%XupHvGhKJSq%y1tJQ{?c%GjKjy@M>XkzOaB4J zK*Jp=me}iK=}n4Q!8Bby()M`-P?ej;7Nx0;#JhT+>6)P_Lc!J|C8>2sr&`iq-Jpi_sPjb`NeBXF zc|{j>nJyJ<1`!3|0c-(0|)CdAJMdZv%L-nnOlysO|Y`6MN6H_K|F9aBoLqAC;#r0efBnxW5@-ErjF7^BYq%+l-z84aW zpN}q?jE|4I51J_t#+73ytfHp&na=MxE04c*uxJRxCb8t|N6C;DJVti9E;ggIEU+b= zryzYekqxlfXur6dHv8~Fb=Uhb*|#w<`z)!SD#lC}Ma$w=c`FdWS1dQepG-J zcHtC!{J`%)R^y!dBs*7;9LuWsoJYa^4xhH`4E+dz{9?`Q@INn)nvytnfcwn#c=yXV zLcIBXVn-_j2cp*BM)tq-oQvGtz=?yPh3yWcYQeSVjz%fogn)8!n2b>&V0Ih2SVaZc zC>S|b>IBt3I2&~>5%z4|H@x^eo6{twY@zFj)h@S|{Z{;>v5-bG7dEEQ!^UOnE9_RX ziZwu%p^+^icL;NP~IrZB5M!0@`N3W>l>30qDA&`@a^|)t((K>m8QVa0)h&FQyPLj22ar>V#O85`xHBe-&BD48OWpRqPB;r~t*V!*gp9uPERy-5$YD ze9$RWik*LFnq2e!hSVAfJ6Tg4#B!(FZB*dhe^WyorA9f`vg7I)6eJ}LJja8q#EOPr zNiwpFd^oEuKVB|rUbL{u%JC_tk`vcm(1~3ze%4_?7iy3?H1>k#Q*DHxFma`zW$yDn ztEp;VYKL4Fa13n9t7ClENmRNqpkK{!?NWcy)VsV_kII(bu+|JuJcmY;5LzS};YZSf zvz@{O&bqWc%j!wz$;qv9s}5`Ge)fp3HPvY3E}Ojl=i=cfw{FGe8(*1fB}cM-eHy9d z)tT7hkfDrtPsVL@87518srH}#_{$PoQMJXzdvQCRM5_wF5+|-PHO}x9G%OP-pRV`6 z*+tH~3e@quChYM?8N{V_{{G*Um%ren@rGo#U)>^3nQE~J5$Q=>8lSYvdfgQ$Ilgz| z-ZP4S<8~cn=!Y6qJqW=;b^o%fQB&NM%Gj#WQ{s#PT%8tIgl(@*`=Yw)rA#o2W}&O0 z4}cyTiRTFn(bve63k~vVP{{5TG_C^y zMWv*x{M~9A2bm(7570)`AiQgheK6^DlHIVs7&hoV-_{v5J04;$#u~z>*AG1b!UdZn zZ_Y+Bty|?gSORX!er^gosmBrV_LB>PJ8M#DaXMMRI(q6hY;kj~5D!&7Km9Lv}NyvCpI{}N}&Ua0rBW|_+)_#&Q$Q=a(%Bybgc zx_-9*fa{)dMU6BCV%LuD8LV#z$Hm|0R6YF9L>Uqc<9(T8iN4>KmRxG&EuXntp`fqz zg5^GP3V^sewqE>~J<-`1*mw|WPx#T-K5uTfCOl@}=0oS+9=wK!zwZWg!{gwrP&Qu| zMNmFVrcQr#^PCRnT7GS->)BgtK>P}wsWr*eC)$bw$&%&NnXTD3_ZR~En)Q7?%uNP! zu+LV|E()`7(q>r%Ta`Whr^qd*2{CRSo&U7ZaofC~$I-6Gl#53w=lNfwfLXKTPJjqA zwrvx`+w$`8MIG4Ub=^-=05SD)rj=Le%P8_ekHiQ!pz`D^K~l62XT7J8{>ZP^?=ceN z?Eeo6LUZ+FaSyf7hO+K`V4rw=K~4aVKFN%m^Oi8?r_j-NQTh(Q&lBXSI9pO)jq?MB zT0&kk)~czs)1(oZ&prHH*GEX+yTiSo6lKF~5}y|E~86UKhTsPO?nqNc6gF&x<-{H{O zEvjD!khIT4im@2SFDvfE|Noy^?u8|xb62N{oo z*Fl6*hv?1)y1u)x;!@3K0(g|>DzdS)4anl-<}b5jKitc)eyVEK!QNB1(|Im-S*$Vt zZ8@&kAy%AX?f-9;o;J$E4h0N0>iP&zHY0cY%YJ?5*+_E+VOr6&y_Pmy(QZNiTF1K? z<8N1+jlpYW=-`Lu65Dln`CjXu75Ql-CGaErZe%E5hDi&7Q}Ow|y1E4?X&r)bIaMi7$e=?VdVTW4Bd@U%)u=}5q8^ogjpjD?{wfVh?)_r3Wa?RhmUtsC z%!1KA5=)Xl^mmRw;6cY8(mx4)#5nJ7q;V2?x*7ItTs%G{OqA_rIJJHxjOg6Wu*lRH zP$qUn4@02TR8{9UsrOME8+C^|&GX@e+^FJbwoSJ&x7uB3BFXAr z%l+Ff+|r7S1w__nx#;00YMALQ_^Rh#hJTRSn)0etP8#>0ESF*;HjW<9&dlU=E|4V~ z4TlVmElyE()+U$hnLINe%k`io4;oJAp?l(g&aZJ@6t#C$_))@9OBBOlt@|s`_DLKX ztpO3zQ5-$8m57qBQVICgEd9n z5X@X$=sY@i9%@}!;2adZp#HjLOc2`5bu*{e$#z}|Bt@)yIo9~SBFfm6L(`=~&y);d zCA1b)rcgDAVjry^pMf00^zNO9rJpU;P~QWOBv~y~z}#oAQvO-p?pmRZ{p4fUiI;mB z_>eneZB6s3R%N1#yHS`eK=jZmv>a8c^Cy_TSNMUd(=p^Q<=YXcU^U>0fPLY$y8 zF)(Bw<#J5!F7CXGRGG0k6WR_Banj9f7bPD-7f*G<&hEU*5-NFbAmXR*jkH&qvIeD( zh-e@nc)IIxXg8~Qr)h$jaa?yheXBNh!X7$QvKZ7($=RTfT-J2e+}m>HKX z_TA42V}@=-m+6k!9^=$fWB!hz^uRjE@^t5~?i^g6@&yjtoRAzU>vT7ZiBL73dm;7e zQS-TG1;1wXg>N%)izaQ!!OFTp4K8D}cJ>T`n+F|xLlEOWJDMlC?s&uExfoZGl2eS^ zmK7WE=7aaQWY>sriWe-$PDci0|ERy1&^Q?7cW``GQi~1O(2CrQF+66vkc_DgvGuL% zf)>jD2j;@1_W@lP<-W_INkj@==Zv;;j@y!^Zs$C@q+o>=Nxpw`$t-NBug(4uaeR=$ z6R`n^&?fKrcJgE|O+HW4b0_&%pk8kRiam_NNYj6`1zIO7iey;%G3PF*TUUI&HOrS5 zCVR1cD9zDR&-M^wnp4c@ z>XIADc>~WMTXUz)e}Cu8nDZ!}Lv%2<>8$f0G;62LJ9^rMAEw|#|K#;A=R$Cr@s3k6 z=O?ko30rVqjTHx|4V#kLbe>Q`j-@f+@QL@mm;!uhx&E@G=@JXG7$xt~_g42sDP6R{ z>?@D(!hDZ^!$en_hl#rN;s64C<|{Cknr=(aG2no%1r!b@s}SSH;i!jZe8%WV1Xzkb zM|s8VWH#RYD{Th@zotlR;;QB-N@ikY$9 z<7E*8U2T{OYPkJv{ZQFO9U_v=N1@8kFOnWPw0nD?$z1FRjcJa~mQZcVjkPi*PdoU>3v2`Of$bFP(b@CSCibuPEX8WDb!wsvYW?zzPxUh zWk1hB%0Cm6O~`YJK_Y$ys$e3MH$uiWF4Yui1c-X`sQXaqZ48T#VBYEY!E9Z|&*L)P zC9b-(Px{cg_lyf!Dy#W+;|H|!`3Qbn?)WvaK_d;#yW^v)vf0d)J?+M&F8Z|04H}f8 zbQfEAhvc87uK>D%v#-RKV?Uff;6=x&RIHJT{s&{+jYlb6JLdQ6X3MQ3N3vi@k9Lup zF~=~WMrluR1sgPSU?GWor(`zVF7x2O&>`XX9MYalo^vJlq92-B6 zwy*>@3Q#~Uo-bx>g_KL^=n-5g_^`En?x-qoii zk5)@PJoN5~CG}~LHkayVzJgeNv<4Jr$FY<5ZkP#BUPy9iQE3kBH$nE#BjwFu5$A%k zp9c0we&VJK`jbw*FTLM1r2VR8#khx*q+$5^61uuGcwG`^^18YO5O@53@tR~_{e>9_ zZv(scxF6?fcOO_SCL{wqIOf1u> zUL1*;QH(u5{Q={9Z-d7o@|ob9Q>Ml=MyiM`xN%!w+n=swq6p1t+O^%i_Q3Nx^^~lh z!A&c6DQd|d4$1xB4NOuw_2pP_c~k{SC;07q!|PcUQD_e_Og`{>D=~G?K;biWq`(HC zU8oc#H>a9;ImOIG(+-XI!ko-q7Ts{6g6CwVKs8cGvsNVe#4%c2@%+@+W6EnBSS=OO z!TYd+QQi$xRC0b_rAF;A?n;{JMD$xfj%lq{f1qoxco?pb%uO$Pf%3 z3d5Z4d$y}Bv`4qwg%}sL2AKg+tbdu!Jy{rTGGxeGv2RK$+06CJ_4qK8oAO zzI~>anNvZ`dDPUMW-*9xn)k|wf08yn8t(yz9_X26z$|?I)C7|lbYBR=E@6W>?Yr`w@54nS?QUg9UQYl@2VGzI3oZ^6~brKA6zYApuyqO z{ZBtmeX|JRfhiWj-!Cr6Cw+jK=S!C3^>Q5Cxk%+{m@`;4HuS$@MCkvPO82-txL@S; zYxC)%Dy*CnAEoPJu#qY+w2~AMjg*QB?sUw%i6Us;+}DCqnOcFa`SNckVU>(=YG|6?*lBWWJLaw6JKi?fI1h_IWEbg zY3B$9=BzkHP)@CcmcU+pF*ob@f-sZ63myC&T_q3a{D?092~pW~>ia)DT#Mi5gXE{k zA)=07wuv8oMKkk&W0K!~F+IcBhgZaxcji%1?fGH~R3>>ix^?D=_~$Sa4U?`&|V#>Vu(a$R>{I zp)(KcEWYaZCNMK*p2CcB$0x!L_{|9^VJv283KZy{j->iet+-57Xu!U>%-5Ww3((ee zuOPHWV(IVx6{~OA7yiK1ssiP_AoMrAe54BU+RaB9v_4pYjg)9Qp_)~1Ts0P4l|4O` zaTe?0*`DtuW7*PW6UNIy&QsT39E?74-M8g>)ThE8Rt^q#Y7QKFvo-6|W9k0ob{LTn z_Z)Q!94?veP~n{WOKg4H-RTF!b=Buo}^ zkacKWEk!q&>?_mjJd|(Q?b#llY(Gr=Md_Q?A&_p>p{0$Lqb*RgDs_S2Yg-5qN1*02 z6gUuF{}1#ZqB#jkJ^5VolZOHnO(be_>81T64wIA9`87M{UAk$pQwo&(i-nEQl2Sg8 zlUm$Qf07s8wguWLv~pXF?XI;5V|w&eY$9b5m#`1HLipo^&(C7MkxiJ&VY=vnNmQtTzzm#_gvUq!cP)0a)EyK#OGxM((r`m$x z^owCX1k=;uF(wMd-E|-$D^Ng`ukNbWGm4GUq{^|(8Y?|Zat0+{@3Ugc2qltf7O}jP z=UR>~r2@j$* z8dZaJhjEZ^(OnUGBolpOwTrh2Wq~&$@V3T)Ia2@llT3a^7$Nyge>6Si=^UY}M6hs3 zJF=V^-+rr&q{?hkBxaHsWl&J8Ru~`a?{SXso z7*24GC+3Uk!8p;(4A?VhJL|oU65*9-$3VOfSy>!Wb?I?0_Ahi-r1 zHj-oV{&hD+!kU5>07gf*4yrtwEZ$l8-M4h zH10aW$64K3a^L!reG6R-E8lw$j@#CswAG%QvFwt!8lmz2^qOYtR{h z&`?@Ot7UmxVxjt{ZY_0ljFg_odDXpXPqkF=qK-7fiEtE8PtQEgjC*F4-+rsM^{d5n zd(a<`QkWd$u@(5HEHIw2wd^iK z7TGTi6X{@n!7;X^3%o`TRo?wJYqK}3UWt>(%C*Exu9FEX{zD2p9P=D`oiIN z=|UiT;b%~s=Q$G4;s`B%P{~ArbiBrc>;MvjI!XoTJ!=He{@alNQr{#aa8JcLIHP57 zpZ9mo8Gd)=?U-3SaJME0ooA-0`zk7fQZs@9=xZ*EqulR z-NvJ0sFnYhVlVPmD7FHWAfngpR&eSl4_>-*2VaIM&yTHNCq9RWv6So2#COc~Nwa9$-EiSwkRx09pzBys6?AE+ zNfQO}#%_?b8Ed;4WfJZga!|TDMd=F{2HEXFwB%nwa&!0gu$^Fg4HgAX{k{$!eB+b|ZXD;?rm8K)B@ZdeJGeuJ~<%u>8kv%CO~s z$@fmc7;%^D-Io#`Ta6T7OZ*t*yfiK>3&2mKk|_ z&EGG)oo9!EllbiDCn)O}h8d8S*~roLa>$*+jpWIU$BBl0w2<};sDbTYKkOO*#6QbrWF6;Ja3AyMyet)3 zAvNz*>3x*#|FppS725*g#a-X8m^@Z?7KJx|8q*$TGxRfc8pbF7`N%W?(tp^3C7Ne2<30^I)@DZPnuG=EpwGp0#Ug=D-4Z__J zv)HxU^l|pb&`K5%nSVAM5;zKXpuhV$54{h5*XO)w`uqN*4NHm2H3#SJSoHV2RPw5i z(=X#nxIkcl$7^4L+pX+^@_N(Xr`w1?OU62(Q=e}7@W2kxO|qNfzWLm=`+HaBd-@oC z%qFb%HDB;P#48NzC6HrTAGr(JC-P*z7_Rqulx}wYn14nW)nNF8sJMt8n=zDg*#Eyf zk%hA1P|yju>i>GO#MQq~_9sDq&i1UX%I;e|_myk)eWADJ&7Fs*&LArr0V1__VUJv7 z4AY#jl_g5}{WSit)hU^LFO9>P)~O%C4d)r$dC0m4u6CjGr?m@wlu6~mBwOwybwE(` z0sAov!t4Jhfm8@Ga6A93k2I>s13qWfYhK-1hyHUr_P_U|?k#Ub+8073g7)Zk6VGp0 zFMQBupT^M1(kENV_^*VglW*S3Nve@2huf{k9!otY25(p|fMpkx87fTT(1Igz1dgJt zzP(L*&fIzUZN;OQZTqH|8eX4-tr(YHYBi7##u0)w9QQf(F`F`ytse4Hjs>3`npbKG zRr4nu&f<(Nc&0fc+jGRDEStD}<9Z<$ibE&o@!=s9e`yuZ^0uC&5YKO1FR)%Kh3K$x zJ)64w%&4u!(#Rd0Mc*0PhFA9Og(pjeRd~J1AKnzND|eNR=q6TKI9ZX!4^# zLjLgqr^e2aK_(HHu6_U_sgD9HF63%Yic=XlgZCN(6$*2b;nyNL&9P<(;h3wBw=}Rd9>Sam-A|#g@#z=UGZ6HELO*z zWIK^J$;nOGD%y^oNpY_N%WQb&21dLSMpLAUFn}B3`-hbDpXE;AE0P)ehle_9Gvjn-WaDXL}`FHa0fyQcBv( z?{d$0PR?0{pm2NQH;-k@2*<>?lR>2Xg;qh}7w`D^0mbFgXj>&WdrhI7FLtHl(p({G zR@gbWLNB3$!3BFeR-6*KGkXuW)`HPPWswNLS~z2*^tu&|3J?#6=C99#rdtXj(%iyd zvQU4e!R@@}ZO>aj8xuKmmY3$MG8KM4iI!EWJ%}%5N8vn}QsbphPThKC-TNwu_zY^1 zn#}q%Q{9My-W)lW(p_!7{UndNn^wDSFND{iLCglwm;c}#K`o94c~&BcS)|poePA+S zu$Q*E!f;SL-Eq3EMlGY_TRtNrtFeQ;yIl#a_T0)qXCdy1dX^2SMo+X#%{aTaR~;P@Tz9)|YQ#_N!*XVo){9h6CpyGgcfe8#eSuY2ofu z-3!(!Wy+5$utL$h+#1rOW!oGIe#l51SV9*5iI)8$v}p7!%mi{#$1g%&3%@(v?KHJj zd+!;<+kK&Fa$Q9HoFB*aTpxU`y{U0f)U|5I{I@GAn7N$u0Eaps{JqfLX?AZ%(IP&< z_G#1Efm0P&?X%6hb*H^X%PQ-RkOmhr>jOv@AqteOv+=HG%oCYc6@>dNxRx&04D z!_fw1zw4skGbzdUrCs#8zJuIbtV1X4yRHgqj6kL!>qZ0Caw-n#i?ihjw% z+tAz{GqbIRsT6TF*d4Y#Q=cW}_tAEKQ-Z3Bu6AIGno7$@^Vf&_Mh_^lhua^&`h)jK zj$_%?_vP5wO&VFU`>?=G+yU)kCrR6{HXh}0xJ<~yY6a;?BbRfSx!8e*{gFMfmbA3J z=|`SAN(xVZi+i#E)??YSi*xz8X9y(O9~u(brzV@CWqCvpFMDnMlx(A`^AypJ6rX|L zw05rJ!&5}XF+T~HWX#+*9W}8k&v^5rhX$978otf{iT+dIaC^4VLYEwAAFk-y;^C5K zL`abwI!-iap9nN4=HZVt87Rr`P?&d770NMlnQN#zc(Z)B#QaFU`F~iu9!{IXXVm%# z!=d@o3xBF=7ZwU9Y7d?iCVe@WHeEiKTuka{E_wAnp{l$XMAHGnZ7&LeH(zJi9H1nPbPK0>I zfzx6(l0lmzFgFyAAx;-!mR6IHW8;^O6Oj^~S>Wa5Y#|xQ+9qajS6w_QAG%b^==_YS-`=wB2z4wwwEo|ka z4&c3TpzbZ7-|h2DNEr`rNg3vldqfczR@<#vZPdk4Nm^^pym6(s5STPk5n7wLntdw=52&Was6V!AVIJHYV+)&R{1PF?nu@vA??4OMmsHWjJ!7gg6Mbc@BvNtu*>d;qy^@S}9Ju$}v&Ot!v|{)J z;cH`-%ZM_BueCKBce9CczqXs;irUsCw3T%D^}BA+yy9Q7XKpM~_a%y=RR}tZ>0?U& z!)la!+O0rVjC$l>ofM5c0EDozr5VJQ%fs{V*I_8S8)q}8 zo)w40r6-RK>2qf1e0-BA6>=&lyRqVC{Ps+pc7fWi_V4p{!GnrMg_KLO*Q+rFL~N(s zeKwqoPGpgT!Q%$21g|;?l@IrK9>D8X=Xp=P7U3=7!p0|0e^Ixh?r!irUl+(GjIZOa zKY&IHsN>Ws-lC&@LrUiwl#LO$FELg=$oK7dAy4G#wrp1P{GlK7<$sJ102nxuRz@5z}vGTFzd$8JM3!Y|Y%BwZ(e$D63e35u34w zciP9tWwRI~pHtW9DBvoo|K1f@F`6sL#%Zwh%*N(Re>7wGgP_ztH7Bz#(rtS-SbrDd z9xJ*UhMkXpBJbRf0lGiX4LzaPZDuTU1}h+A6FFZ{F!K1eWHc+T-()-{I<6=ENU>vE zYIe+$2n1oTwvweX<6`wUFWFb-RmhnJLFjnSFc#5w4A#}pQzN8w4WuYJIo93T!nyZ& zW?hZd$Qj$fM{tr>I6h&aN1!TNxsJ9Xsb~#Rivx#w3umBSnDRD{NeBP4O0-%)lK`NA z`!mv2fiA_TL6Z&Qliy`9hS@4Qo)uyx!$H31`=H|@NBdcD^d!wbc1`Y~ z{79N@(4(t%9S4sK#YEPoV=@9CN!e0Ct=IPb$&wt&YH+u-bK~3Qs6=`lFN$>!T~5xS z>FCeavx4+Z_rVbd()fpU?cu_%Tv=HmDYDZoHK=z=>xqpqir)wb59yXasq&2MZXB{2 zM6s-7ql_u^t;S?mtm06g&cik};7~uc(PuM_Et8skX2y+&Dfc6dAgC;8+HF|CjANIf zKi}|Z-nAlU_bG|0J>0?uqio0R$&_;`kHIZdbs; zI$EEtlVz|=C`CO>ZTYw#LCO0nXC5JO?*+!wuA4ZXqDG1?1yQUHK?muXF@&?ZeDD=Z zcBLmTpmpSx+c%5FxV+yfU9MTwQlpktp_*bdQ_$GqqGH`Ec|7Tl*Ww@78(nsx%FYN0 zGH_qrAj-1_(Br^IR|((t!ou^=;u-fd<5MU7Af2Z5sREhTucJFWx}A)I^d3!-MI(HG z?dNEHL-lo`c9ABHe=c@NFWdLlA1w2_y6$gRGq_2189FS0N(o$U>x9Ca4C}}UMmWPD z`{BN-sqUKL2JtzoZw-8uN`V|*D5b>h5KC)OZ!~Z;^=#aEL`@rlj=QW5-6*w8T?IpA z7RvFvW46IWdh0HAp~ny7OB%2rY9fU#&hzCY{JJNwhue0S{4xIaN(kKTHN3~~JqtSX z)$z;t@wG-F^lNw!Ag9bec$V7%I?#a1vPdhO6a^NzF7$|zUfRSdveZGPrS9V@s<+2P zFYH?T@}6GHM=g?B!9cz&7qq>N-7Y{>0(|o-t?G7&rrH-c=12b-H*ste&#NnRt5xs{ z568Y&geI}fI!B)_%Nvhc5cM%XOn(Q?Wg}MG8siO>4HLK@X-K;!GeV3#IKZX2O& zXl>6WiBeEQz`@;SHW3>wpfI2&0Y?1-r@Licg2(7SWkO8$(-jp1@4wd8TNbvkOqN1c67farg=DM@eP#ZI!-sI=j_~H zVLN4t`Qz9*ATE0R+WbpXw}j0Mbba#|{m&iX2B?ZSYY}3OfN6k?<1}F>JMO);aXEE( z?A3QjmjrX-o}Aj3c{7A$61dyydxK+_-O4V-s*z0dnPF+X<9cB&`}w#YAC)##1P$*c zOAdWfW(qD?uvk7~J)v`Oma;i4WLel=P&9#Z>l zR=P}wUp|Zb^7e8nhGUc}9nw)O&!7L17xIXZqLbEBt^<#ikXAE^0?2E)DbFuh%OGcN zO1@adq7oj|)wC-K3lun3Z_B=`s9&C}M2m?7im(Y|_i+0uOvFf}xwYon=+%vt&YMac zkS6%c0Bs~v7l+d%GO(mTnNg!E_>l18p*rrqq5B^)x$Y-_5&CH5;ARIxp*Y*w5Wh{0 zOX>H%Aw1o9!_J5s+1Cpob?}9KbyMNfL26vC$)9(TT_z&SuzgM(CB<;Q@2b|z>}$&7 zT*1wN&9zCQWWGLBXi#(kkXO9z54>=sQ2`hnbt^1<_rc7r=nl8vttBj&^Xtj1R4%ZaZo3 zil~yr7{$&quC{uW-a z$1J4YUEw)YB~~UV;JCA&&s$`_D`emYzgY;kcPLQe;`Euq>gBI!X$rweeUR%aE;-Z} zK)SLC8xKB@-OdkAi%w1&e3YuBz+WPb6{_G|o~f!j=qCDxLBhp5O2+a>!BoiwcJ4&? zhT|4>Gz|gD=+cL=s${%yyCO^!t>hi+h&wpe@29t|)P?HhdFR-*QKHqw%Hnr1Ki=1GhxIds4Id7CZ*X+7#_ zh%EgvD*Rz0m}k1EUC(K0ovI=dXItZ^>#L7F=N2IsUExgawm?<~)RMwurO2Ct zD1GR72tZ7sJ8@;)lsOF)q*~?5sd4c2$cq075H-w|@?*vUJL^J$K)#{=B;@rX&dSk8 zSb*McetA7U<6%!Mdkp3Rp*I;5Z-?40R0ik*=?taGfLDSL(^lsljd7WaJTCF_n(eNE z2e60y$w?&{{=U&NZ+FexNS16^#*k?$i%_Iq+M61%Tgp@O)urzB+!upaw}{#a)LN8R zKLHEAWd)XoWxs+O(k}r6J0Qany?G_~Yj^GDA{I&_hQ=9RJ!o zs>^htHXkkXbzs_uv}k?Dox(W~%&4C5a~9Y#Qs%n*Rqxk}fohwuVrg63Jb#Aco!gb* z8*~cc%9LuPT4cJ#2YSxYaAa+rsOMZU(D>T3NpP4c%91x|DSazx$U&&jQrCy^f4?>w zttB(QgtF#-QBb-T&CfxuLg@CoEH9x&3be#9#4n~!dt~yyMuahi9bx&%-Co`L)x)-8 zxJ;6t4U_gpJv{KGS3<7AgRCu`4nubRai68ra%*}&T+MvEO~U*=EMvdlr@2Z~r{i`$ zbOZ*k5w~NI9?h(U5O7nvmNQIUD5vTNks1yz)Fcrt#LJ!nuw5?4fm$)tUzi3VtE$p_ zuKw>%Te#FT0Q{^Db@wbF?Q5l${NWB<+KcofIbTq71P^okt_WcsC~VI4 zURDc;Q{zA9ZE|ek+D4YLe>$1c*zr|5KVjmnNGNi2+7{Rh@CEp%O$85R&N(A?rJILCWPg<&;>~5B zyS>7-)k+sXdXQbSdr1l$5~#{-#AGI`*Jp12@`x$B$r($#vggr{#pMn8x05brjDkisa+2I(d5xuSkkLhAvSAQVb_RT?_K4y!w4Hh;{XCbg6_kKUSnl2!wLucsa zsp7j6=ezeG^NUt~z-JNAqHai8{!wu>XAhjhD(Yiv-FMF*OZ4_^3oV~G+Z;}f5-fe` zbzy0A`c@B@Qt^==LyumzA94Tbw8&~k>*(C|mIrDr^uV5O9huh_Q66=|O=Q!}$;xnA zlufGujIto8VN-tjfqR84sEdSjZY)kZ@TQ$fn{=Q|IgtB$M2l=seyMTagpx>KPbJq! zt;zWx?ix@p$l3(urtg8B+5V(KKvCs3ZgE6Qfvfsk(G`zwsxl8oEtHELa3U1cvBs=4 zNwxSK^4TB*`-g?DRt6cxZggBTdH;ZVSu1*;7 zw)?Cx9zSBmxj=oW&&9MY#IJvg4u%bT*Nhe#h29f2V~|?V%Zc3U;-vS}j%AGib`iGu zVM_X^?dH-eC;M`gQzu~N-s5xa6BvuA-}UxR91v}-4#~Yvgm>+OzsEEQT6bDjN`gg8 zzjF^2bhSugp0XuK!&kdly~VIy`Z07kiCs9kl?R$|ZXQluvE-OVT}dorNc*DIX0PQh{fjR(wJ-aQR1$x4trtS3=daf2`%+K9b=$LU zYK!d;QKtL0DZUn6_DY45UWWZ|5(cgsRDSrZ|zO8`(La3oyy`+iz`B^;#73be{T0v;g1ggs9F(6POL+H1% z51Xk8Acc5&dBpshZ0+_gt(y{;KP64u;GbU!ApmKYdQx>;aOc?+p?ARk`2`_CCyt&UR(f<(v#a51cu|U z>x1RcMH1}+iQ21y-hPW?*J*8(@2g_FiQ|;R2_!3cXmc>}C<%hmY+5N_-&{WDzVNn= z($5FGyo9GN?B#tO%bV+n7xp|<$|bH~SWy0bpRKuZU&n~KpdO*jOB)3W2l*Jctu5fM zPW)#9U=peg(J8C9sKWj?6A@5^1JHru^$au+I~?-K{KlrIlf4%k{tszy9uIXJ{SQkU zxyzQNg(6E4B1;HS5<;6HV+c_)$iDk@TZ$BwG|6Mq&ro;Y z@9%m3c^#5~Sh#wP$l+Wn0mg$P-4en8JrlTSkzjueAtsH|7 zE2QKUNDeAOVHg+WS5~;K(uFe5)yNq2oV;%T<;n-kv4#Uo4go8V)3<;E07+DZ0QI^l zg({A_(+J2dC@LzEIFmtW?n$cOZeqixoo3o@zpg8&RApp0T-Oz>STvZ?qbVYCf*F0D%57gyS6|ZSD(mIu);JgHHPh zvrML%bv(`D5BX`*s9cU4jihAc{(0{~2tlLKMRcVf@Y7J|iL^*0kR0sqW({{awU+na zK;#F$i_DkxEj47LC>7*0+JT&>lzU=TOwvm=!u`nU@>ZQK8QA>SyQyGmKAKwqA{^whPRq-J zE56Y{=v=q#(f_k5J@K=0j#UT1=pE@ai zUkiA;!rRJ+@MMaH|3$8dFjn1BjH1B6(>VE5+Xes&>giM4C!~L@khcXA9~E_`-#G7@ zB3LwXQbudG(YU7sr>{0$%ujw0KZ#8FPSky5w2eFBo~RhB>EuCE_6%fn9p7Hhn=oXh zHc4Z`?qtO(tHguXe))q@MOv5OJLsF)2CXs7L6q!JXLHm4eQyw}ERX@+hS&p$S2Sjq z%bGn2{O9BKmn@0V?Yv~9&^A!S%o5H@9=LkZY5E%YIv9$gC-LGPN=6lrS>8lw=+EK3 zEjV_uCemnCV!7iBs|nlbY*M4P$c23^?1smFEb!;CE0Qi-IyJ_qc6pABV9m~vEK={i zHa*OCR(A3!tNvi@+P4=^SdE73HIREI=FKW|4-=mnkWH?p<9joZsglIEBZB45h84HV z4}Eh8{yNes7YX&W=0~9_1xsh5t$a>;S9Sl1WQ8kRbtgmQFR@`nRiRfcyKI@y6FV(3ba}UO2mlmZ zg5+d{ykC!Xm?rnb+UqLcYFa77D5W%!-m8%_@d_Dgq8I9nE+1_T{q-Uqc@U~2K9`S3sFFW6At`QdZ+u^dEn2oQF7YFt z4sq@JF+Wj@96(KUfC6}-w*dHl(9C5$!JX>UK{o^5blsx5YfG+6UH$tAf+|*nYuZXp zX#3e+ZEbJ)2)$@BFX%3Yco=CFdxk3PIjD#LF2N#b4|GNSG7)y{uvdo9*Bz$Gz#d$2 zlvbWhjrY11B+68v$OP83R)230rN+?x7#-1dxb#6c?XeeJD(<}YU${y-Wa5_R!o+ck zc6-cQ2qojI#fzCaCz)Q2`p+*@b{@EY)v1(Vda0+M&-15O92I9ZG#>6<&nFO(IVqU% z$)UhIglJMwJZmXzIxcU6dq4^#3QX)1i41n>T6p(C^#Mt((Fri+m628-&3*Oz9*%wq zAkK8%?Yl*Met3yL?82+1tHV|U-s5~Biw(6biXHm^A8r^K@0XsAt6fXrty6&Z zPQdPgkO9ZEj;L+K^M0rAqXPaBNMomk*Xj!wD~j$;52TE!6F+c2#x`lP1}|NP`c9eh zW|X2SbGJV$Z)bb;;OuXZbzRZ`Y*SeeY;1s7w-PBM@q*;who+;m=B0wsECo|) zI>r^({w)mYQid(I-rrxDiFP2Wklo>^&>7dW8qiy`_FA>^OAv8l?RfxC-dP8ovgkUE z<)-Yd1Zh#e$kcoLS|Gj{w@|7j&Zjr6jPj+(K(T?-c#f1%ME0ZJN8a=G8e*p@%W_pI zM!OKaq;T_4E4uG5)2M)=L{>7{4kE9(T|x; z|8O90<{A^W=Q1|&7uu8yRZ{Jy$wEmF86X4wg_25|sYMF*(cy3Y+CS zXGqkL>Xp9F0qU?q$gB@u{Ax}pAByaY#C*%(tZv%+K4UiyV%E3`_jc1!$PNz>H^xd@ zm)g-)Xa8Kx53Z{Tw1qv_vRCEhqB}$qeyl)(QYTXGgc7R^qZfP{HjuH|V1*l*FMmyB zJgjxT{viV=id^Pgb!oSd{$TX%Hf803*CDDrp@_@X3+Ti$Hnhxd&R~ZsoL*`ij<`^r z!ewez4-LW=EBXuCeT7d7vSAZv&`DQ{kijekV-WHX#@K-YcW$%O^}LZ#=dx<93t_|^ z;6ty62>z?e+8`+H?^w=GrCsV`@|1a2Y?zMO*is;|-vN5^EkhCu%7LI37>0iC;&EYF z&G>);=BxE-7%EsTCt}SmRmYFUhZ^Eo?>m{-o`CddsU?!b6F8D-!t+UkRCV@OoQvBR z$0Na~0|@V@5vSJLwE5Or>#kW6;k#qv*=U)_RKgj&$k}s`p)+Y?8D_juzsIAg<-F4S z>|f09b>}nuJ`~H0t=Dnx@PVQRpU?TdR@))l34k5g!4Ctg{Z8C~uoW69+q9wURPov8 z@Ux-Vo>hY$Zfwznu5l(ZF}H89GZgJz#-(Np*iPe2-nKve$y7n-gW2_0N*p>os)3LM zL5>tk#&0WGfO(a#GN8psSWzBo&Zv%2oG1BDpA}yptfkF@4W3Nc`SA80%qk zUXPEkn6JPPh*A?e9eVN#Ke|tnTYEMva$bLv z6JUwLFS!EbqmNjz)1IcuAaN5#x`R;GTP&D`VFA8q=u4Lzq$Jmiw_M@!?O02#4U#BH zKUBB*b19cf3tvl?W5?D>iE03V#S9Do5x#CeAC5F+liDPVU6k#$G+S``l1=d6*4axn zDI`tN-uxJbz{EPaL2E*pqpJPY!dQ}5?}=4hV=W72qKS=L5XOs&2aP=Hqd-@8E%H$7 zeu$dVpni3r2Y_LumlmhK>NGAV<-(!-HivUq{uW8+7}3b$$-ZoHbWj~;$)Dz|pBYv-EpxCG z9L_t680B2X_pd&L{JPokJhmrBq(={a7Ka6f#4D=^yX=>~_?@3_?IjC=ZwtBw!*Wzp zw_q@5UR(kEM(VF6VPFHTXQ1#Rdx}f=C1pp~p})z42k)(#9Tx@WEA6SjZbTkfnOfaa zOmEUGLF?)|b0of`XX(F?;_?|~e%#OEcWS!}9UAWKbc!kikE!GABzSf6p@v$G>FMv!w8ks@qqTA znw-vbz@0A(i>+;gIJk)=5*e&TYoR+=1vyF zm>Z1=TIHT!n9$uAOp<&7EY%C4`3ycP8l$Byyyj`t9-G*enB99B+an$aGCm93jV_tV z6$ZD>2Xd-j!23~r$)|i>$Gk;HCHqt_}wkvz6{q6 z?{rkPF6WR*b-M(nH z^bKojFZP?l5nw2;2Ma(Q=+(mrFg%R->N!*@fytUV%P|YDF-kqC1@>39xc?>UIH`QS zv4C*k&jzLZDLdk7sFqeldpw=s!3uVMvW@3(hD4XwP`o*}`_EVA+}=OM2KY{LlNsu< z&agvnsdeGFS;xYm5A_DV??=EZCUgRSs%7?%Cn&tLq^hFTF9qP!=F z3CLO6v@?ZcIQL$jbLOnMrY! zTcs<&FMr}bP?IZaFNrIJ0bB1D%ZFqk4%FFx1};*u5=0`-kE)nL(q{_YaljJ=#aB6| zJrdxcovGq%2sm5}Js*;b|=@Xu@2O=QxWtAD5_wdo)XIO{CD|0!}-gfHRc$cmmJ zM`);FT>esXxFx}`A{qrvR?q!EjGY=r8HMJEj}C(#;YWd;=h-L#dB%=`&9F&xpR{!f zq*!X}Z+)T5hHV-XbM09*PYMzAu}Z4v@wu5~B#|ccHVF*EEJ(TihZji}szcxMze&SP zLscPdkZJg*ZFKU^2#e~b0n!_-KU2x3!eX!q(L5Mc47Iwfmdo^Jkp@5AP3$a2gT#q^GQ@s#uk{Px(g6U5opq~<&LVQspgM;A9-lfvt7OCUftVWgg-Ig zy`H{B-S&a2QN8-t_#lLjLbj$1;Tn)~BX=;j#%$qWq^Z41vJk16=y^WkviEqQEDDzE zsp`!RO7=hT3t}^5Wj3%@dZfvrmSf$seb^E+r`w9F?tk-+!Q%S54sB;L{XX(f5vq?f{l z+O8c5^h9MJEB*9rJ{5>IT+rCi2r;f$GS^EH>Havn`&Rzv z8hTPYKfNGIX7FxNjZCx>?4;%|kzLimQp!3E=_|mATiy*pW;hh$puR2yrZmtk1FokA zahPB^^q)$T%F(egVIMMG)m7GI(`SsaGl)Q3mx|5z@?~XIA}d8(l%;+I@zq<+%ATHu zRZo{P%(4?fxu51C z3mEte7*@aLxF6FL2}sFt2wodC@=4Q}D%6e^-tw;$n@TP6Z}eu_jkr5H@ZSVl4?ECs z)=j-x)fY!=7yz98UC33TvacNTTqrjw@jhv!_pF*sxX_FKwJ+b-UcBDOWTA%2s5md| zzmvl!{$a-=Gxxn}+g*Dc2KqX6VxyvCI^&ZZsob`Q z>mYf*A<9!5^!6l{B|ZQ5JkV*ZKL_gg0P>^0naYQMKONo-VCH^9DuxL|`|E;`LpNfwv+2;mp_fzz z{@=7_r9;y!AgS*e!APF=7-H$wa$sS_g^j03={SlD)7+uhAEc(&0ImPxDYyx&Nd}s0 z_XfLF{+{ak>!H>hK7{Dk?HB*!F6t5!>x{jBHSqQY9AbR<_t@YCW*}{U(G89}hU^0x zN{?(Vn%9PY^k?Z&G!2dvq%qY*=l=Iy=n$N&rsBLUt(fgU7#lNZ_VI9S%(ccBYzkozWR3)zmK{x)szS^V3d82dkO9DA7lOAKbeub{H zBgL|w<@dv{pgFnYE^nuoB@;*G$8%rV3YED0xS1N)e(Xt~w@pmfz4h@*jzWswU(-Yf zybk6qCDznh-$zzTG%v5h8SD z=cD>0{_td;-_{Z%N9(%be6jFq^|#SkNr%!JUS}K)6UnP=J4l9vLBSW7BEmGaA)_^= z4+{JaWsyn}51+ohi7>PHFoY>T~Ej_FT;8o3y7zEKO;x6fO#B8^dN15YQ`#mik<8p$rBkg*^UN$yS zGg6IX4ymC9jC!H@+6XccwybzaKrrgk#jwz;m2tC+#ovB?XIK)L&m5sv+(9xEx!ej)LC=nDSH@v2`5^zW*8Qu+pwmUB%6Eef~hO&AK1Wl+5ZeC1vJ5Vzd z&LZ0wHkyB2`#oj|+S*8K zwi9)iMEjijPmy*x`MrO;YMtNdM4Bf(oGkyuL+H{ki?&;IfqH^h%-F=b$Zge4UrD2N znb3gisC^aR_&1fp2i`Ac&^jwN9OIdm3C(8QZil6cTGOK!M)Rw2#?s3(kCu0}bDp+; zSUfsfUm!G)G`|)Xe$mP0>qRv-p5W8ZP()oT@m*4;SBy3Lp-cfnnG&tqmVdhtJp$t? zS}`OL>en)%$y)$%m4W1>Usv*wB>4L|LV~u3wxQ^H)E9 zdvnh)oR7_jujOWb@z3Oza?hVu#({ar$fuC z368kP=k>9@{??_IJP*tGw!Z5ap;(v&tX>`p&-t-Gnj#!1$r|bhWh(Ltnri%Rfrc6| zXe0n|{B?_$Diu`xl%cGd#qsU&bwMIXtI#r{i66XJs4V@%gHYH3Aa?D7PDxhwQ2*VM z;+J*LLUn|W_dfCa2+5xQh3e|i*!U;!sKR`EqYPlhxF2$3HzDFBZtLC{W!g~LQIF4+ zy$+Q7Xlm8Urx#V;oXg*mHm~8>^`?jKU;hSwm&k-*S03!$Q5i4K>v0_30v273Ho;$J zZ&pZ6f(miMscG*NhV)Os*ye42rnhynO@FLkwX5^xK#mEtm}y&h&31THK<$+d1PtwJ zQ{tZ*YIZoeixJzU6Ho5VsoRUO7a>C^wXxG=)=>W*^u@Ew-NbqnwN%NE(9Hw(FKW<> zI@1sI%YGcGMhb#GtVP3~=qcUo@qvVXC0ZVY*DQd@?6L^Z=hMVk#Hf!w(&5v8Z5nd z;*k#HKyv9jmElr(;-TwR&mc%qdBEc$WSKfDEV=o*ewod3j&ZiD4J#;rfN0n|DO-q? z=dON|wGC0{Z+XapKn+@*#+pI^aq>PfhkK=t)6{AxuEjPz=j|c#+*J?5y4-TiQf7dN z3Un8=RC>%dx7kGW6TRq5Ft`t+kO|dX-}pfd7l9tyAO`xwB!DRHj8$m)j3S%_$J|X! zaGEUq`d9>ljjSl(Lai5Ir-MW3Y7%##W?Ep%qqGS+2enzNSEPSUQHcoxo$~@ROxx$m zFl(gC7sEO=K^Z}H>6ioW131IFZ{#H<5)Ox=e$S}-g1kr!KAGk!6HQ4vw5$3V=(*@K zj!K#Fp}n$`Q+i*7NkLy`T?+)TAkf3^GriE8(OYO>X_|CjT~$}xBCoQ!A&|J{HkB@} zG#$EJ_TaRAd}@T~(}6yN(0tM%ao&Dy-_5R6d4#RizBYdVY%hBkBy_O4s@^KI5L z=M4Q@_7qTC-Jq;O_@YXy&5!>tmCK67M_BN+PgRW|XL&5QwoZyXfWs@3b za5@9AUbshwjSWs5WwnR#0yVj`yEzXwP+^XkAxOAr$KF{%5%XmCDvf+wC<|*r$qr4M%`9Lj2PHN%E&6 zTT!nj2h+Q3Vz}MdJZ=ZTT{1bVp<}9up?yF5N>sxHR1u_sj>Lt$s+4nZY#ly*Bbt4h zQKw5LVRSx@FE7$X={U>97HdK;3d~ZRu;sOvs(@t0qv+gRTP*=~hUWJ(laM|uAslvL zxEHch`NOUb_a2W}mPdigK10inKn*U`^;uWuxuQZuW6Bg%vyA{_1)weiF54WKM&9n{UKZY|Jn znEk@&Ns<*zJ>Mp|FLI95#%JW%5l!Mi(_9DgZ9@AZozufK^H-3Hj`_nX_VYa&pGDNs?Exy{iB)sci3T>+(wH@34m>s&NRbbSk5p%HkH#Fj=GR&(o z%xq&$5Yxr}>C!j1D-YKFi7GLp{?bu<^xPyA#Y7%ct#fn8zW@qtbwulM%bNAs7cTv) zt7hS}!VRUQr6%Q?F_nSDFAr8kofVF#e-4wqe#9K3mv2;~?J&HQE3oa{8FZ#7D$()O z1K$)#isB*LgI1=|9M1NR|Sko{op034@^NSV?>mH)=T znX%W=3PBVqhUzaD>H|TsZ!F8E%Y3o!b+`nuW!IB-4efuhYD%L@zlR;G+zSdYEv zE0duYsuQyP&Np(bMDbzmadB%?ugoGdZnl0UIiTe@?25LIcDo|J?(Y~N5$w5-p<$8G zfP5RIMXPWgbGcvxJyyoa0Di8e0F@<q}P`#ExRH=LRSkM>t?=}ux9qd`GF{^h1k66v-d<1gm+n)cJm7Njgkn5|Djh2 zf`rWdhF~K6=LO_Ho^9L@#Z~?gh)4=AT!Z+qV4W zwmW&O##*xf83eLt9b4NN1PvevweS5=_Y>vFe-2`SGykB~Xek!eSKELpP~=0igz7d@ zrSlny%Xl3n;ELTS=!riB4uVD-**YlVs|sr%B$$U9=G%Zd3SqaydHanKV0*Ou?>}S( z`m)NeCw)Np2tK7w^)GN`Lr_p#VV%@CdFY;j`uXxF6=2{%W6kXa+8j>+Ch)N;v$cFz8kk4;8!&I9f4#t~f}t8k{h!a}ozuiTK&%x0RS z9joV{q&p1;_gMi};*^!P5B)zZYJ$EV`bGWY5^6R@IS<4o+H+A)oaUYD+-bCd((sfw z!bg_^SpGoYWxXzgyWNqROjofwUe<7;q5=le3}1ga=QW3$?FEOSg@>_ z1bnpOF`SRUBe$)6EMsSvzdO@2b*tjzOAeZv)Ov6%C5~^=8?6o`j?5Pb<=U%QLAPJ? zq%N5c&QS+bo>?1W5`(WFZB%`tb{FXOSLB&-xj&d$eDlv&fInkwPgKMh3M zy7kIGtO|~qaiXGrOxOZv75rE$6zd>LI95oDSqa|e6-P&8_ce8>5UBq0q&>ZwqF(@xEst)yEtB zt^2~?DCH0JkEOO2)kzUjjySx(T7VGfyKGy#RPj#Z3zj@ANt~z8&K6{U?*h!4-YzqZ zJAgPR=C>uCt-(B9cPydxVs?~hFyWDLdww=F8v-eA($N=@w+@lmUU)+{;$VKOXI@c$ zNBdG1n>m`G7a^)%l0SXEWxoDQu;R!J%M#s+W1*mFt;daBaNKu*$k8o`sjv>T6JR=> z>i%WleWOU;`;ki?I$tJ%K>ll@Wtd8O-T^WazDLNK?L^On!QnE@vbJ*|(NhLaf@C#K zMwE2lH#O^IF=K-!?ow)8T%bVyDUW?XbXLfAZqb?{a~rX;=0XO^Y45o1TWgfJ9@X!E zES=MY(xJBn^$Ia4df^x|>GGsjo>k;{Fvi zNC-4mvR5zt=>!3t#vSQRvH`>+Ka}W*w=D7K7U1^jc;oJhbv@K}9xD^f$v;A77s>@4 zmeke{y2}rfjWUTCjzbnoDSiDgvun2-zQDm%4%PcXw?Y*v!g}UwId=TWTr@r?fIy~w?-xu$}4rsnzy(MlBfJuG;&!k zNyRW3Dwl0hc4&z-H&237m$=EJ0Q&GzlMvHYzyE067~a6#mu8~?;!+1F`iV!~k!|-7 z9UCVsyo!BpG>(` zGtu$L?69d-9T%jZ)e)hIN$yZ^mniFyUpJH-8G<3XjUL@;fKy#wh2rGVam=XT`{ki% zp@sjwR1RZY`^bP`C{UVVYY@|wEgbKq?j6kfhg3s~=ppt;>_< zifcZvYPMXQ?Yy!7f&hL#Z%nwxukwR)k6VwE1$7&|Re~1h+`gKkBsciQJgIH#3utxH z2yYxEH=Hqpy?GBXGo$>~Y9i@A(SH@k zwMVAxnYj3+0HO`*{83GaB&)3`S=m-~)FGWVmcvM}P&BO2R&~lyZwr zkS|+lR@O{Yy4u@R@~hUo({pU!l7MH)Wz$hsVVBp4P*!O#v^;7uf9r3(ti-!rq<>Ghfs*^esJo1w!zJa%Xi--`&f-8rivUt zciUfbWkP_wbQyPSf7Tt&;*u75%u~y0pWb4RHPyKs)fpr ztrHzUOj!Fb@Sxdwd1XWB$!-lD#da9GsNlES`y^YbB)6(D>E(g#1pvVF&}(3NI)Uky z4^3FZ*4n@VblT(ETWwXl(D$tTX3>x!?$}UG{Fa9gkxAAq7^xevX$cQBS;t`*qiJ4k zEjxh4*)<9!dn&->A&BCSSMHw*e@Vc}xt+O*^Ii?DJzpD7A4s%0?qR^zIFWnHB10ls z>q+vjjt~4>eFJtF>-jgUkrk4l(QD7-qxR7{$PI>6p|0)eQcB9#vlknDUdho5I5=K< z!;1K59&mEE%_AacV7Gjh^@krgEXnS+xDuM>RC}hskt1964OptaD(+ z0q`<9-K`fFRAE2YvoN0^8`r#6OpEia(aSWjbmKhRfG|r9er1>( z9=rUrIx@CytZDVHwUDe0jjsYQNd*Aeauk|$dEcYKM9AqW^^DoXoOXrjWdu8T^<40X+6dmNm^!+`)e zMG`-G=~Q=J*FB>&O6WBSD$Ci=Tzta;zpls~;~toZALWI^dHP^2D~?HnS`t2mHxUOb zQ^ML*_yU`%7Bg~MYo$og8`e*&fAR;k2B8U+rx&n8S%X(i%xUQ$+0kdo42G|H54^I9 z6K4&Z9p3zeuC>bFldZR0WCPJLgo4*x#X^hI;4~fSY4F?9qFox#;M={|@yG|T7Mz0Y zf<)#idp}MRAMc=HJ+Z-fylPa+BaS{jl>u&Hl#$QqAWxv@LH|9-&sW6H+}!B~T?=7V-h*yaBWW>tTe@C;-^b&+}6`f{@=J^7-&ddgC zT)GtnbSnpQo#WjtOMlM3_C8>mypIWia|{1Dv8R)4jorhbE*Fss(_Uu@+M{y{y+sWg zN4+0RDxAiH0JUyP_y5fh{!`^4T^DAidUDouBTV8BfCjECFt6LLLes!_b1%RS6+nC)dNm^Z zP>4`t7M$37iyignPsjdabw*Gw5yZEt1YKI1JJtIkU|NO&oXZp}M#qNR>HZd|qkarh zlFvH6WGy;MW&{mHLsKcBsnt@}bkK*gBQS*3facij*WK7`qgxiV4YwYb9H*gCp{YQf z4YBLN+B7u5TF-WvT8Y9-B{`_>zP>4S*x=2xZ=-?|=jq~ZHqxW+J^FR(&_O##S`^wK zA=hYBFa8rYp|FrpytrC|yX^P6ExwN&r`6T6f6gU&>d9sAJkH&R*6)Mw&w0QCn0?)} zPppu*P$RN9Q>GcglQ0CbD@SN-F;X+c&=vd1TPj2np6~e4PJbF~|BJoW^_2BR0Y66JAmwb$j8wCuYU$ zuo~j6b0VjIKkUxkFK5%6%oOufZ~Zr)N96lN?%@^kQlQAC^+Pb>^5@F`2#1VRB}P*s z)hx{83OEVRuhA+Z@8GBu_DlcHtX|a=A-g{^`2Ap-oe7$-D4%(nQ;m&hUcw>>)L#Uy zp1Cw{hh9@9E}9PF2w99Y`Vs(g&?MZ0hPofs4(NWZek-?s_p6<7k@Xv12+u++`K8cD zPnIMw??;>(x^75&8E?NSX~L{X5Jg-}9EYy+;1patxXtswM%dBPgiHJ2zqyZC)n4I0 zKRYR~`Vi$xnzSq?Y&a+C*E#oeybSdRuVN3%nvMMFvvWE)aa%CNRb+gP;!r}L(&LN= zgE(sBK2f=ZF};Z;AUaPWdL2D6D(zZ$;=~aq>(y&+o{tosOAYNAd@|CD1I=Pvuv(a0 zV>r9IcG-eb^38{n=Gxc3GZ<}0sY$4RyTczZQxR0;ZU5oI#eFn1W4wYP4a-LT*DuHD z==G1s>kc|Wr(if0fyaJE{4E0r1j8`u-q6rAsu9XCVaiZmfg5|CkJHBMrXNs)V*+4W zNV$TnH zXd~=cs|gGx?zjj>?=fL>QvS4=`L>mhCOkh@ZO1VQ$qZ&a6P;O>jnR&7FD?kmeF+4M zx-qQ{as7B#!nX|LRA9Ga)C;Y9>b#NVF})dyn*~kDdK^W5W2Z}dUoFYr+^rgUFiD!* z#Uf%hN_#k}X*5_2tXn1;n$NU%!_=H4QYZ#}R%9c5Oh!Mn)t}W-$U1KpQkldn$R}uz zTBGPrWCOogUD1zTD;ew9`SkjYtKE~*eXLbXr+hNbe-|}TsW^4_p!^=>!a*K-W0iwx zEL)w}SeUkazxYl||DSFj_wd|sd;s&@KLyVZcW+N)QryqGL-Yy%RmIcq4$_JS(W#u< zHJ<;5JUZs>p5KYJ?Z7rQbvR9|tbB3{cAO>3H`Y7q=8xKTky+)_S>+Sg!V?sVbxe|n z`)DcSp(W+SbMSX{T?`8h6pk-LQFLL6PQxr6*}yX|6|> zy|P5MH~WQ4>GnlRKXM97Yr43o_HQ2c;D0I4%_b(bs1-gvG~o?*TS|FJtOZD8{&87ILMS@ zu5L-RE%~l%Idv**d&>KqIj!hl3%^e06n}4Nklblv{e%`%XJ559uLx^m#dp2`Um+ii zqTA;hwQky5u?~@)yN=SCSRu=Wi^qN6-`1E2dCsP|lrHuX42s0qGCT9(b;}1A1fPwE4QN(&$!KwBbk4^GYfQ@%xFZH4HG}mdde)3&CX5v= zPS};4K%!+euBa^MWw*7FczVrwtKNGjqkDB+uSK3bhp6V(_%VBA-~q5 zCZH7ZZtIGD(;nM>|Gb%rcKC5fFX4TgRy_m$vB2cp-DGLb%*ZpO*4~!2j#lzAL2l6%UbQWUe}&>1pk@H&={Ejo(pmzAu< zHfn2zZcp+24u{7PTrTY}jDOzLAM=AU`AjlC{PKMnbj_}hvA9+i9@X+Z%KUOFrtgbP zmwLPH*tGR*VbH?K{hNk4yk~19&aj_w$vCv@{ z@o4lMj-A(Hod|iCEv-lTG}30*-X*G*(o^QMVrYB)1A>|Vu8PUs3t(=A~&(WLCnIc{S0 zG)=cNkou1wzmpzY+RW!f;61vP_>0AF5%>sQtav)#G+pn=-gBo`H{IT zL~;3X?V5`lw_EeI7WMh7v7yb|iIR&Gowt@Jnpwzq+<-BR1#i~6y?BjS))^=@`Vr?( z{tD0jRyEPa0?hGgtq-#rijVJ76}UadZRos+ZTM9oHKE=(xaL|>>D>`lnQ%lkPSm@u zaT`hTF7Z*x3C_lx=V8b%v6B;hl40*=`xJy(nXP75Cg&LH+rk8tjH6th7>g1`Z}%%F zJFbDaDZhzRlyLf2m=Q6EU(Rt8tn6C*cIYxk?$qS3B5R2Dg=VtaI|UKse0%J@lwS+a z6vAHHcK2E}ZYTN^!=AG_OifK&?!ewF)kW8@Ca(SdbGG+ForqCQDaJ2RTsiqmtmeP9 zwLYIkm?Lf6Ce}2jhh;pEX!*T;7_0P&b?~9m8?ApeDKCZnh+~)YcboVn=kl4X&Kh{G zvE<~4;+qsUJrli1Y1;lGO=^YYM;y^cg^R_+>K8ZqOM^D`Pek#0L6Dei?GAprH$^ko zyh|F8czS=L^Ic-cyu917=!LW1EnefH0<^`6ESiZlij^TA{}7X}0MT7e2R2IZtWc z?Y~@9ufaK5YTh(;ENpuc1GoM6s;?cXn)20~n;t9Oz9-3?VfuaU*MjI+UoPu`7y(A? zqWQv9?GI2qpBe{Z%BC&2-+mvB*%bs055F)+&CToB#PXnnZ2Wm1tEB+Lqx${}^cmPdvM4GO<>5n!Y8+vTxga#;F zKVr3*;tuSqWhQbGsMwlyWxKW${lu;ykpZjai^0K*TDi!b%h5NwkRFA4w`Q)2t)!Vo zZ1N^y0e?~`V>!v>mz>w)n>Y8A@}wRZeppi|BwE+MDaB-#%$tXBDk(Y7hb79Z@7I&7 zzf?&}NYmxV(_<%{26Rq3>P6CBwDtH=bKavk*Em}6lQ2GA7g+WXzUkzbIT2_qUg2`+ zwysOVn|ERNQZDh0BOkO!d@zMv@4LR*s(#7Knku7TRb^2#e52^s|4(T);E`M^hP zjrU^CJW66PbW#>h_$Xif0aHh>rYNDsjY{l+mWs46<0omNu1z@iG|_7!Q~Y$(9duZ8 zx3oy9bLA^ju#{CEamzpC3teRKW7;p0mO`5zBJV8 zU|@w*V!S=Jypi2POc%?=m%7OWrAhhAcTNWT_TZaVTDy&0ygpt#fpsbwd$yhAwv}k; zy(*2ne}QsqAXdq(4*f(aLFNeO$K@&CC^qu%@~KDR-0T3>MqOnKR@#vPNQE zm$~iz5J1Q2uuUul$kGdC!hICYM%WZV zP>IUwfOSi}D&{MlI(@W3TiQLZ&@JW$vy1)A=3P3+$K1Yq<670X zBnBK?v;+B^ny*~RcRfii<eA1e8yz~{*#p^c`Aw3Ym6)G5`@h|} z$3fA=N}bYLH;v~oNrr=x?kUc^kaX*gobz=1d>@(Kft^-hY(%vsb`LrKEG2S^UcV}x zkRZ>Tn;K46$;3*vrIh`=tM<2)`myGs6TNyG0 z5@IC3skhJ)G?||%Jqr-aEIuKZdWsw%|7~b-$?-_394>!1VzMe8bGz?QW3*jeZ9-&j zS0U{;=fhh`m(n8VR;+)ii#ga6!x zHMIQfK8@Vi=G(K7g5&R_sDZ$NCI~p;+;Cm6w0R)*#$%vlm`lc&X?pBEP!Jg7Qp}dO z$E><*d@-r5IhAvbv>ZsoSY$Xrk|y6j;mK z!CJQRq8KQl%oceP|1ikTng{sx>cc+MSg7*!`BsLR>?dj2 z=FV}y?!3P}^_(rIWa_@m>#H330xbEa=^)CI?Z9>&f#5P~0r`kb6lSSZd5O2KgL+f?iiAm?c_)NXpjN~y8JhN zG`b_DE;tRd_{E1^wNrB?ctjuK9d9AwN}%mV-yu+%Hp?bHdYSS=6=0qng1)D0Zj9=UvaHpHBU6k zuc^a+l2_n4QL;ZJj_#`X;S(z)fBf-;VA*0&^82!4Xn34~eVY6>T@pJ`QQ7k4w34YKzI)~oGY6bso zqFzXAb>6Bik^pYTA=urs{^#gv!b>jsMa<2Kj-8_Td}JkXIwmU93~fhDtgKp!B=?fG zeLJQzsglfLs5Z}o*M(gV{sG(&3W7lMln&b;bABJ$@90}W{H9YSSx4~YU2i^)8nKYc z!D;4V&ZdG<>8$_O4${+n?0-MfW%SeM@o=LK4?RHK#}4fLfC-I|y%x5*E579N@C2h| zxBpG~^w5W(=cnAHX-_$nV%!9$<#y4~ES;s$-Z>H=OLMH~0oY$dHkze;+`PRocXWRiggRh(Pgp2oS_Y(B))3W}*enakHn4tPj>PEC( z#kCXCc2%849@{^p)61iPDLF1JyL(MBc{2@G1$3m{4?hby+C1(3QaUqyD(y@CR1*e( zJ?PVHYd9S%N!#+m)gdmZ`0?2~*{skvO5G1FmkL7{C|*YUdGX?oPzkj2?zC5z%Y`9*ibm3<}IYvv4Xm{=Q*717gQ^E-OV&x8@6=j zcGZA;e&6y?P|5mO^ynvdr$}t9)3M*T$Z*S7{&P1IsZ6xo^}|!;_YF2Donz%VKLxLd zX=hHqGq)T$ATL~5j;xsGr-hpBD!F+qn(NKDPUbZI_J*(H*Jsg}!;=OX(I?d>$fiwO zZrrkBDwiJWbq_vRE9J7>b<*}mWNS%;=% z{pe>g?*~}O>@!{FC%RVpwpu>hB6=tBsS$FM3V_iZKU=DfQc4CUUDP#o#kS;5T8|TWzdAqw*>y zrAxWPCbBcNcIx?TJIDWN?8@VsIJY)MEm#*sR4hfPOUZSCxUgvg)U6gVp><&~KtL>l zfPf+xwy7*yq(~Jp8VJ!=;35WsU_iDYizo_M0vLf179p|*h!8@y?@Vla@9+EP`|?W& z^Um^4-sPO60JR4`rt?FjG4OVG8$FycD^W_g!`p?pOED!?;v# z9R*rYn}kGn5&T9posAy%$An~>jcuywP$|kq*||&HC@-$b>M3PYJlDmf5>pjPCkM#x z`mGcC!eQjOH^3-+P9N<_U~gs&pFj}2n7-Tv@#T#gWt;0!?`YlNBOBb%u%B3 z3Sv@9!Mif41u33+X{q|$>J|O?s$D#{nvPgy`BEX{T%;fE8?U6Aq_av+-9ba#m#RW! zbQal5gJ&SrF}5WiQ7Yvz(Q{G2OBjdLU;*Tt>#PKQ`?DTL^w?WaL+#%Ut^d##x*>yQ zF;TcN-~?E4DUJD=SDt%3bCDw4btT((Qq!ACb_<->vqEojh#?xs?8B(ms`_5q(S~qu z-E4M-L{jaLc;*l|2r*L3P$Za7Ddpp~_>%A5TzmRk(z)TY8Q|ys1g0%g)iz5R7iN58Z5HQ%&0=Zaw|L z9ooe*DQ~wA>&Ebqw=g#@`G|h_O0TmW=#u=|ciE{p#C6%RqU#0k=3(r{=ejn8Ym)Z! zI)@Y~>7uGgLE|HjYukH_E^M>8!I_I0fATh)GVV`K&rZ6(k4IC8_w)9w`nPiIc~DMb zmzH3D>PBMMfVJA2Jr^C|jX3kJHAM33rUE!D^=S*zf*L0r$e$G|=&8*fE@S(7jd3T2&qowQ@<&?@@t3v}jEehbt@A@O21*-QR5H1TW@JPbsIHY+%dnH)Rb1^q^vp5@bEQDV9Le!Q#b`?IwbdQd!x+5UJpTx zSj4nkXy%pVYJ?+Mgq=b#V5R&idnU~8PDVi+wT3y&N^ zTSCqkCkhJJ==F`n({bGQUR%$l3``?3s?zXs9zA6pR-2bd|L-?=#e=-g>`Lrn(lO4r zrU5fs0|uXM(K#utn*#9`qjNGuzF}gUl1Q!y*-RKNTycMkj#CInuFM(`zZAWFE?fpc zyk_PCx!8^XfNa+GbEaNq%mqML_2bcUk)zwG?JE2*!p+ih5Vh2HJQBLr3ANC6*)1)WA9Qi8z{EVrUV@7FR@5M8fdzwsJ_S{jgfHl+f zLFAP^IN)y1K%2Q%nC*H3ut1gN#Od+fkGDe|>ty5%AK~R!t#w@&C8B;}|H?QVkMeheSW;e^O2R%p-Cy_3=MvG}JM;ji>H`qLjIWH7VY_b(Rg1&2)mw@xRMUyaBo-v~ zx!RQ@?>iEq=BUZ*3O}O~@wc=~0Zp*z1hD*^UwPy`U?u^Q%h`M*xeS6lavkDrw2yh+2Y zYFqP!i|_xT>lDajUt@2#SE8e07vx&Ks6DaS#e&}Y%@_I!7d5o1PAigcCEgNtE7e zxoB5UXAdG>_Ih4hb=-Dblmz|6oBv>{2jt7Bw4=tUNkNkGr1JJp1<0w92|;5^YP;}7 z>j7Tl0_P)q1$3zTSi}9qb20N=46t5&aD5w}lZqOBs03EnO1fIotuK;`+WDMh+|%t7q#7FwSNr9AeH|F zOF*-R8QCc>Pd$v=vM3Ml+g`~}V05G6lnHLWV?6H0=0(ghdKvV zx_Oe|>+rO=$uH%p%2N?K<-Lk+f(C}*V<7IY_+;?fTlBpAM?Og^7BLu*7*JXY zYAvZkgo+_&Sttrf&88XzMC8_3#(2Ef9bz_MvtHI7H`JdRS|_PGMw2VS-#HGq_|={R zH-i0v8tY`dz}fxHh8)m@YqfGirV= z>4lh;=4c##^C~k6nJ-Pn2Mlss8k%?LMU~M`kI1zA$Ms=Ml|1~|i z>i!l0`(U$j2pnAQxkKE~AC;9P0IJXP+Da7s$>7h8n`19YjkAE&MUqQy`Iv4g=mD&e z!)QYr|5HpRq{UeJ%@+=P^H!BkJ1h_DlMZ6cN|hro385bt$T^+QutGWF-w`_ z?|ToK5ZxjstD7-7xwxt&IB9Q_76wX!g_m=HGFRy_FpNFcA^oj!CHPTKTG;@A_Vne% zjM9(2m+6k*9}ABHxH>t6w5W@k7f`ccCw-i2<;UJ;kXJz_tPp?0xN99U{A>Y^aXWir z4uJ12j^rkoAS3)_1>JAtx~P^o4epqgTGp@+&ILt~!_(e5%i@`)o#No;u8T)N#GDE{ zvXCh#pZmpJm)&uWOmC&!J{e|TBM&#MoUCvs`yK9kXdc38rF6~3o-+FPbno_2S(ki6 z9vS~p2ECRu?Mn0EqGz9AZL)bIf2jKhvfc%bZ3jd6i22n~B6LihKqCu~s`;7?Aa zS%B$JeGdco=6#GM#^+K9`W_htOO6uAzmE22X_t&x8d8H-7J=w|Rqmg05Qu44;010Nn5SYAxpg#cLu zK0#+ash0uk+=Bh^NvY+EPUkfjeUFoN+BZCS_W@MU%!A!ckFck$Y#h_kp5DuxwQbj6hH{398r`9|5AfnA9!-@1*`nb_BRf$Vy9sGU1|8 z@hRKjTB{teew5xV3aTnWll+;2O1`3LyiL_>lWF~Svw||EJjk;*%9!p#{2C<97e|zM z)TEX_(O-C*j5o5<3Q~GfA70V?VL@d9iK@7w`PGsEq1{~*ouk6c3(eGxS2dlFPxd~$ z@ls$c8SNJmq5^auo>BsG-?LLH1Gi**l_^gcKKf=p*}rF3yZJJ=q&dnPb6-9>tj}h{ zVrgpGy^9m}RH6k${|*=x6bG+RMd{Hp6<;Gv)rYyQj-#wKZK8`7?NVNohub}}`#Zos<~jn<7C!QNKF2o#%C4`;;|x@0-6%PwxFIQ|sR9|D%W+a!s>{ zTJ52^1Q{CnbyxG+BL-i6O7ikt5BiDvRlINEBY|qJq4j;d*{6~WurgRx+j_t^Vi-xGm*?ss%}9BFpWiIK&?*@L_2LfEh&^4sdSfu`#9Xz0ge0;x zX?o;!)L=W{V=tLSCq@j!kK7`OFWOkUQ zZq74Tn;`jaQ`aQc!36Y2ypu%ctslM8vb?p}BA_0S`Cf-!O^u%yfgu=NKeA4z(wnAz zbZS=1L)vEES5A)HPqV>s>_GR001K0dpQ?Kn>=Ui}U5`B^mj3xs{9v4c)j+;2DIUk% zWJh4p(;%53pB0*iwesoj`!@G9=L}P(-;D*czl>)l+k~O}Cb4EZob9#|7UpclMzy{; z@LOY0K_r5*uDJ_6Q?#o&x-gvBeKHd-|1sMQzR^FP2d7<;(9CPx*d=YO7`M4oFm zw~Ov;JaDJ1cTAZ5Qlwwf0D=;j(3qnT7nvyJ&LFIr@VB;>@PjxJ?JX&<{i%Pn1uOek z+fhvrBtB0*dq*2oQ2A~_*~B3({OGJv4PYhMEO%AToQrT$rB!mM;>M~Fpyo6 z)gZaIozTpEpRr{0Lu6F&ieqJ!p|6V@tai8T!M?a1nKXgCrXl`7s=r#H6eKTFSvSCIC!e>TsV5g7lpcdI&V zw+OCkB)|!JNPDqai=&s5`s&0=Tf&D3UPRLgRmKojHR{ZjPZUINZyIcgB+)>X4T(er zE3tZawPgp1@Hrk-+SN5qX)KGO#2*3A7HX3&D3rik%2V>uAfsQ6wu^3Y{@kRDdrR9* zLnHlr-WCu6Rg58bC2E5$WLI7=HtUoU+)fYFqe))IHtB^*Mz*!Tq>-UiNaH$ zETn?fK6gotDoh}Rb~dI0yvvMDz~Yms5;X9rq0wdH@vo@n7KIz_jFBqG8`C3zEGz88 zp5bD^2W*Zt`RErXq#;wvJ90(VijJFz1)S+6G*hdiv?V3;3bRrCD!6BI$}yRqwXgc@ zrKr(II*wT>g{xRJL&0Ty&_7 z@8IFfTlMe5l>wh28tk7x4Vh8ali8Ei!P6S6gE+%x;Y2+x&SXVp+>9QK*(~w4CwSj9 zBb;vWG@61mgXY1Y8ANCYjH)%0I~W%={9^k3S6hI#L6-OHa}T_^Rw6TGpVHDT?jO&; z!d$U_BnK-$OOq=Q-TcFSTPNPO-a~7@$+8fGhIJA`;_1^Z-ck#?GQ0>t`yl`tkGNiOwK)Kv@eogUt3L59>HUsk+0OD5#nwB$P z7k7OvOO+}3Trb^ z5d8+0141;~6}^m-xz>UX%xp!w88w>p|peYxTuOX)|dT!a7 zoTpPwLQ9$>XXZ!04L{VIS0c8u+kbS}qOIjEP-&C&B

Xtpa-+F|kf7z))F!tDb-( zh$HXX8D5CZo`b&}D}O;NrQy z%6NnV(&FtmR&;!D8l)cr_gCp-DQ66zJvDr!-$5eh>h%wSFHEy6MzfZ>E=6mm%VK`u zb*?}+arwSx&3;|BhteS@i!z)-$Au^rBW|;8X^BA*-u((}pmo9gAh#9T0MU4z^qYk- zOqc~ua0Q!=o28b9#_NNd-2%-6-UXDS7A-WHWnqj~z+%RmKHshQ$knQ)NU@o;p|{xG zfuy0!I^C(yIocW;+pcJz*l`gu=2rMzfExn1wY%?OttzE`&dk32YyHn T`B>~ybe;V{;(`2qp0WP}cZn{g diff --git a/website/client/assets/scss/variables.scss b/website/client/assets/scss/variables.scss index ce054846bc..573376536b 100644 --- a/website/client/assets/scss/variables.scss +++ b/website/client/assets/scss/variables.scss @@ -2,8 +2,8 @@ // possible values are: normal, fall, habitoween, thanksgiving, winter, nye, birthday, valentines, spring, summer // more to be added on future seasons -$npc_market_flavor: 'thanksgiving'; -$npc_quests_flavor: 'thanksgiving'; -$npc_seasonal_flavor: 'thanksgiving'; +$npc_market_flavor: 'normal'; +$npc_quests_flavor: 'normal'; +$npc_seasonal_flavor: 'normal'; $npc_timetravelers_flavor: 'normal'; -$npc_tavern_flavor: 'thanksgiving'; +$npc_tavern_flavor: 'normal'; diff --git a/website/raw_sprites/spritesmith/npcs/npc_bailey.png b/website/raw_sprites/spritesmith/npcs/npc_bailey.png index ee18cd560dfca4891b730f6002493a0044905947..d5940b986bb48e28954dbf7234480f8421353806 100644 GIT binary patch literal 3673 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 literal 10492 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 diff --git a/website/raw_sprites/spritesmith/npcs/npc_matt.png b/website/raw_sprites/spritesmith/npcs/npc_matt.png index ef720ee71834c20ab058d5f949df7ee93a8fab4f..2531f1084b244b572e1de6984dee8b481fa54ac9 100644 GIT binary patch delta 3141 zcmX|Ddpy(oA3nLnI%Of9B1thtC1j!23Slvqxr}m&8o5-IyXKp$i)(DL%v_emhKNGu zmgI6&Rx|g@m~sv~E^}LEtDn;A_x{LdJHq^|Q{>=( zIY21US+%{11En-qlJ+t5&g|QMDEsTBq;dIF)LxvjIm2wckZj>^#8yxb#*_D%eWqEc zHzgW;kesk0qYmONw)z{-?{y5^BJqHbaez@-irS@ z>A6}$iC}bI=IPOED9GCnXJln0)%gm`j>v@qvj%B2=KMQY1)FMr$ZMDD zNds%~k(IJd3oq=BURo~^id z_|A);>evT^E-2g&P}w-s$bwWt%>=<0#`Vzc<*=upj9s(fq_5<*% zg9b}N<;#~nq?BzszVwyV_Yul#9D^elTf>|mz1^%t0<}Po4HN5i%^9N z(vyQs4{IG~(Nf2Lr5Y&t__X5mr-YY6ecLyh9)|Oh-|xw80LCE+Te_-us0mmJ>S7pX~mLT|F_?DFneYuF3J{+8!KgHE_EJX=o-((DnoOxtb-<* zTX}U;d*ExhL^Y9+0|PsuJ^uW`K%X<(R3j{7wgOm6!jn5@hWJofW20MjiCVCT7?ieR z@n_X@X0Wvzi2WF!jR9LDD>vmuw`dL+OV?_*RUyg<*J)-nL~Lk>a~xiYj=}{jO-Vd& zv@E^_8;YsZ*E9G@poh;O+twBWwaYxIYAfwpBh+Q9Jl!Z%D@qzvRkTmSuAv#wtaV9q z*Xl|`bT{-^v9wObKGCtJSwz6cJO)bOdN!>yAIl94wwogN<49M`pF3)o)1dH8GQum4 zXWuSc$-6%KVnUfT3F++%c0Q1>bojZAWpPY_+?iGQlN>p*H)oOE*r0Ip5(#Zv81fH?EwnvsnnG(e+TuZTR7)W`|D+ zAkQa?gLsMhzqY9%McTnu&RzsqWQVNzW)Zwhj2v#~GyzSH0NnY2ihW+tWBX`$`?q2&y-R?gu* z-SFMVPmS~!iRdFHo<=P+)LF5r3V3>jqh|A;-Jd$v9=xnyEK&$Sb~2gmUk3uj7D!|Y z5YQx^h(0_sY;?Z$~fZI|Ag3QdBP~f{Q%}Ov#RYscPdvsZ?!D(axcVf_yi)P$TnK?vH!zFwNt?jiD=Gz zWujW_8F<6D4)8Lw^v7mc`hy;gbz=n9T@zFbp(xMLSkZ*Auh5=R5wo@!8}1FGIW*+k zEMr$Dxr5Zp&Pgc&OACC*HfCeY?UV|SX+Zp%(snCF*Zo=5M=mMk8mi!&G<}5vn=e;i z=e<2a7O~$4D%G*x>JJ0$?%D%@BcFWJBQC1i9eoLPKgA(r(s0OWcmbGpzq~dpEzAjd zT`fhNs1{%J@@unv+NK+?@~23s(vpk~N}cHJWE@t~{pjB-@LSxi^uv1wroA^JezbIq z6(T4xI)X%_UvP1kp3z>u?4~)lga1wJPQmb&IJC$Y-OE}eb29ou_PcGHerlNOMPMKY z31VrnMPw<2qF)OXr+=hoFX817VeSGi(+vF5VOr>;PF&Ak5c#Uv1-t5)*qu67cx6Q2 z4awMcbIu7w993(O8osU#wub4jF>nokGu8NOG_RwOGijpAu4+O?pEIoVx2%pe9O_R^ z#N65jHBo;S%T{9Va)LM&5TQNFkKh!IKAKJBhdB-z7^m)rnp}wwy$u&2g*p8+`3+`E zl^`glsC{e|I=DEU&GD6x>n?lT=uxsCuRm_CGM$DC?CIECADg|VJLO_8K(f@Q>X~Fc zyK0NJ>2UYL--OL1h5q|VT`8}|79lSt3eJW|l=*mPBoaB)2%6`si%pVpeE?*@=|Pb2 z^-6>@qz?okhZ5d|S-#E$HCI_c+byvRj#alB(6O`GfdKu2a}QJ0Sa0gRxMkx-t-S+L zH#8KEiy0mlE}yOoPIh>panq7_4U~OScv*i*REq5B07Kga29)^eyNceCAG#+rRipd+ zzZbOc)vNXj3CiJ{0DR@U#YO`M9qkppp^8!Kdl2~$Vi6zv&Y$0KU7rF3w7gQh=qMv$ z9MW3GEb`J}|9tE9|NdeN<`K7i8io z={Y1Ei08Uk_91NgIrz4<)1X;sMhr;~e5rU;DOM$KKq?~;Dv48z4qDFYRDmMVvo+XK;rbuWQ-pmPI ze7U5$Hr5@$)eo{)O_q0$2X;svbeZS}Ijp0lA#k!J+{N?U%9)Gcu$bvIs)Z|N@Wrf* z5FW66vSVjZ4=+6^eBAapt5$T7pl1I-fvv&bWOZQNo#bxj)2kXceMz%3ti)!c z`SgUzuV3lIE~hNY(SIw?d+yVEh-Dn{VN+#;0u$=)3c^_ci^V23!_w!Q0Vy2^N1_Lv z+Y4_f;1)FT>?>Y@-bi;nn>A?sS0iZ5cgJf)tF*9W?XYuNFkWs>aziMt0jyU`1=DbS z0|QC8n|0Etj(=-oYGXd)8}quZ;owU0P~~cE4JJyPK$Y_D{b_kW9Z!b-#KP-plZy`E z`2O=7I|$vu%K@c}F`Y?&3|e!|O*-}~zE};DuGp08tc1~=a*0Gg(Xld2qL~tYZ)ran z?Y3|QT@*F7Fnp)%!AAANB8bPO85tb~SiX%V9O}`^xmf4c%G?R=Emyw}sxr=I9>jXM zxNP<7w=vuZRcU7uV36($`J;DV`TD!LRiFw2Iiret{;Vh!xn1xi#yRBgy2w?|A1md; VI^Uzm(*Ich5a(>o%S#y>A)* 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 y#}%CaIbNmLAW=s~Sn^^*!)2uFu9*n?&e Date: Mon, 26 Nov 2018 19:01:55 +0000 Subject: [PATCH 41/42] chore(i18n): update locales --- website/common/locales/de/gear.json | 100 +++++----- website/common/locales/de/groups.json | 88 ++++----- website/common/locales/de/questscontent.json | 24 +-- website/common/locales/es/settings.json | 6 +- website/common/locales/es/subscriber.json | 4 +- .../locales/it/communityguidelines.json | 2 +- website/common/locales/it/content.json | 4 +- website/common/locales/it/front.json | 8 +- website/common/locales/it/gear.json | 12 +- website/common/locales/it/limited.json | 6 +- .../common/locales/it/loadingscreentips.json | 4 +- website/common/locales/it/messages.json | 2 +- website/common/locales/it/npc.json | 2 +- website/common/locales/it/pets.json | 2 +- website/common/locales/it/questscontent.json | 28 +-- website/common/locales/ja/groups.json | 2 +- website/common/locales/pt/content.json | 2 +- website/common/locales/pt/gear.json | 12 +- website/common/locales/pt/groups.json | 34 ++-- website/common/locales/ru/gear.json | 12 +- website/common/locales/tr/gear.json | 6 +- website/common/locales/zh_TW/backgrounds.json | 4 +- website/common/locales/zh_TW/character.json | 2 +- .../locales/zh_TW/communityguidelines.json | 2 +- website/common/locales/zh_TW/content.json | 182 +++++++++--------- website/common/locales/zh_TW/contrib.json | 78 ++++---- website/common/locales/zh_TW/death.json | 20 +- .../common/locales/zh_TW/defaulttasks.json | 26 +-- website/common/locales/zh_TW/faq.json | 4 +- website/common/locales/zh_TW/front.json | 10 +- website/common/locales/zh_TW/gear.json | 52 ++--- website/common/locales/zh_TW/npc.json | 2 +- website/common/locales/zh_TW/quests.json | 2 +- 33 files changed, 372 insertions(+), 372 deletions(-) diff --git a/website/common/locales/de/gear.json b/website/common/locales/de/gear.json index cfb549dd0a..be4527b555 100644 --- a/website/common/locales/de/gear.json +++ b/website/common/locales/de/gear.json @@ -93,13 +93,13 @@ "weaponSpecialTridentOfCrashingTidesText": "Dreizack der brechenden Gezeiten", "weaponSpecialTridentOfCrashingTidesNotes": "Gibt Dir die Fähigkeit Fische zu befehligen und Deine Aufgaben mit kraftvollen Stichen zu attackieren. Erhöht Intelligenz um <%= int %>.", "weaponSpecialTaskwoodsLanternText": "Laterne der Aufgabenwälder", - "weaponSpecialTaskwoodsLanternNotes": "Zu Anbeginn der Zeit dem Wächtergeist der Aufgabenwälder-Obstgärten überreicht, kann diese Laterne die dunkelste Nacht erhellen und mächtige Zaubersprüche formen. Erhöht Wahrnehmung und Intelligenz jeweils um <%= attrs %>.", + "weaponSpecialTaskwoodsLanternNotes": "Zu Anbeginn der Zeit dem Wächtergeist der Aufgabenwald-Obstgärten überreicht, kann diese Laterne die dunkelste Nacht erhellen und mächtige Zaubersprüche formen. Erhöht Wahrnehmung und Intelligenz um jeweils <%= attrs %>.", "weaponSpecialBardInstrumentText": "Bardische Laute", "weaponSpecialBardInstrumentNotes": "Spiele eine fröhliche Melodie mit dieser magischen Laute! Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>.", "weaponSpecialLunarScytheText": "Mondsense", "weaponSpecialLunarScytheNotes": "Wachse diese Sense regelmäßig, sonst wird ihre Macht abnehmen. Erhöht Stärke und Wahrnehmung um jeweils <%= attrs %>.", "weaponSpecialMammothRiderSpearText": "Mammutreiter-Speer", - "weaponSpecialMammothRiderSpearNotes": "Dieser Speer mit Rosenquarz-Spitze durchtränkt Dich mit uralter Zauberkraft. Erhöht Intelligenz um <%= int %>. ", + "weaponSpecialMammothRiderSpearNotes": "Dieser Speer mit Rosenquarz-Spitze verleiht Dir uralte Zauberkraft. Erhöht Intelligenz um <%= int %>. ", "weaponSpecialPageBannerText": "Pagen-Banner", "weaponSpecialPageBannerNotes": "Schwinge das Banner weit oben, um das Selbstvertrauen zu wecken! Steigert Stärke um <%= str %>.", "weaponSpecialRoguishRainbowMessageText": "Verwegene Regenbogenbotschaft", @@ -293,9 +293,9 @@ "weaponArmoireRancherLassoText": "Viehzüchterlasso", "weaponArmoireRancherLassoNotes": "Lassos: das ideale Werkzeug zum Einfangen und Zäumen. Erhöht Stärke um <%= str %>, Wahrnehmung um <%= per %> und Intelligenz um <%= int %>. Verzauberter Schrank: Viehzüchterausrüstung (Gegenstand 3 von 3).", "weaponArmoireMythmakerSwordText": "Sagenumwobenes Schwert", - "weaponArmoireMythmakerSwordNotes": "Obwohl es möglicherweise unbedeutend aussieht, hat dieses Schwert viele mystische Helden hervorgebracht. Erhöht Wahrnehmung und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Goldene-Toga-Set (Gegenstand 3 von 3).", + "weaponArmoireMythmakerSwordNotes": "Obwohl es möglicherweise unbedeutend aussieht, hat dieses Schwert viele mystische Helden hervorgebracht. Erhöht Wahrnehmung und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Goldene-Toga-Set (Gegenstand 3 von 3).", "weaponArmoireIronCrookText": "Eiserner Hirtenstab", - "weaponArmoireIronCrookNotes": "Dieser mit Leidenschaft gehämmerte eiserne Hirtenstab ist nützlich zum Schafe hüten. Erhöht Wahrnehmung und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Gehörntes Eisen-Set (Gegenstand 3 von 3).", + "weaponArmoireIronCrookNotes": "Dieser mit Leidenschaft gehämmerte eiserne Hirtenstab ist nützlich zum Schafe hüten. Erhöht Wahrnehmung und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Gehörntes Eisen-Set (Gegenstand 3 von 3).", "weaponArmoireGoldWingStaffText": "Goldener Flügelstab", "weaponArmoireGoldWingStaffNotes": "Die Flügel dieses Stabes flattern und drehen sich ständig. Erhöht alle Attribute um <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "weaponArmoireBatWandText": "Fledermaus-Zauberstab", @@ -303,15 +303,15 @@ "weaponArmoireShepherdsCrookText": "Hirtenstab", "weaponArmoireShepherdsCrookNotes": "Nützlich um Greife zu hüten. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Hirten-Set (Gegenstand 1 von 3).", "weaponArmoireCrystalCrescentStaffText": "Kristalliner Mondsichelstab", - "weaponArmoireCrystalCrescentStaffNotes": "Beschwöre die Macht des Sichelmondes herbei mit diesem glänzenden Stab! Erhöht Intelligenz und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Kristallines Mondsichelset (Gegenstand 3 von 3).", + "weaponArmoireCrystalCrescentStaffNotes": "Beschwöre die Macht des Sichelmondes herbei mit diesem glänzenden Stab! Erhöht Intelligenz und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Kristallines Mondsichelset (Gegenstand 3 von 3).", "weaponArmoireBlueLongbowText": "Blauer Langbogen", "weaponArmoireBlueLongbowNotes": "Fertig ... Zielen ... Feuer! Dieser Bogen hat eine große Reichweite. Erhöht Wahrnehmung um <%= per %>, Ausdauer um <%= con %> und Stärke um <%= str %>. Verzauberter Schrank: Eisenschützen-Set (Gegenstand 3 von 3).", "weaponArmoireGlowingSpearText": "Leuchtender Speer", "weaponArmoireGlowingSpearNotes": "Dieser Speer hypnotisiert freilebende Aufgaben, sodass Du diese angreifen kannst. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "weaponArmoireBarristerGavelText": "Richterhammer", - "weaponArmoireBarristerGavelNotes": "Beschlossen! Erhöht Stärke und Ausdauer jeweils um <%= attrs %>. Verzauberter Schrank: Richterset (Gegenstand 3 von 3).", + "weaponArmoireBarristerGavelNotes": "Ruhe im Saal! Erhöht Stärke und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Richterset (Gegenstand 3 von 3).", "weaponArmoireJesterBatonText": "Narrenstab", - "weaponArmoireJesterBatonNotes": "Durch ein Fuchteln mit Deinem Stab und einigen schlagfertigen Antworten, klären sich sogar die kompliziertesten Situationen. Erhöht Intelligenz und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Narrenset (Gegenstand 3 von 3).", + "weaponArmoireJesterBatonNotes": "Durch ein Fuchteln mit Deinem Stab und einigen schlagfertigen Antworten, klären sich sogar die kompliziertesten Situationen. Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Narrenset (Gegenstand 3 von 3).", "weaponArmoireMiningPickaxText": "Spitzhacke", "weaponArmoireMiningPickaxNotes": "Grabe das Maximum an Gold aus Deinen Aufgaben heraus! Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Bergmannsset (Gegenstand 3 von 3).", "weaponArmoireBasicLongbowText": "Einfacher Langbogen", @@ -321,11 +321,11 @@ "weaponArmoireSandySpadeText": "Sandiger Spaten", "weaponArmoireSandySpadeNotes": "Ein Werkzeug um zu graben, und um Sand in die Augen feindlicher Monster zu streuen. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Strandset (Gegenstand 1 von 3).", "weaponArmoireCannonText": "Kanone", - "weaponArmoireCannonNotes": "Arr! Erfülle Dein Ziel mit Entschlossenheit. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Kanonier Set (Gegenstand 1 von 3).", + "weaponArmoireCannonNotes": "Arr! Erfülle Dein Ziel mit Entschlossenheit. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Kanonier-Set (Gegenstand 1 von 3).", "weaponArmoireVermilionArcherBowText": "Zinnoberroter Schützenbogen", "weaponArmoireVermilionArcherBowNotes": "Dein Pfeil wird von diesem brillianten roten Bogen wie ein Komet fliegen! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Zinnoberrotes Bogenschützenset (Gegenstand 1 von 3).", "weaponArmoireOgreClubText": "Ogerkeule", - "weaponArmoireOgreClubNotes": "Diese Keule wurde in einer echten Ogerhöhle gefunden. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Oger Outfit (Gegenstand 2 von 3).", + "weaponArmoireOgreClubNotes": "Diese Keule wurde in einer echten Ogerhöhle gefunden. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Oger-Outfit (Gegenstand 2 von 3).", "weaponArmoireWoodElfStaffText": "Waldelfenstab", "weaponArmoireWoodElfStaffNotes": "Aus einem abgebrochenen Ast eines uralten Baums gefertigt, hilft Dir dieser Stab mit großen und kleinen Waldbewohnern zu kommunizieren. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Waldelfenset (Gegenstand 3 von 3).", "weaponArmoireWandOfHeartsText": "Zauberstab der Herzen", @@ -339,7 +339,7 @@ "weaponArmoireBattleAxeText": "Uralte Axt", "weaponArmoireBattleAxeNotes": "Diese gute eiserne Axt eignet sich bestens, um Deine ärgsten Gegner und Deine schwierigsten Aufgaben zu bekämpfen. Erhöht Intelligenz um <%= int %> und Ausdauer um <%= con %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "weaponArmoireHoofClippersText": "Hufschere", - "weaponArmoireHoofClippersNotes": "Schneide die Hufe Deiner hart arbeitenden Reittiere, damit sie gesund bleiben während sie Dich ins Abenteuer tragen! Erhöht Stärke, Intelligenz und Ausdauer jeweils um <%= attrs %>. Verzauberter Schrank: Hufschmiedset (Gegenstand 1 von 3).", + "weaponArmoireHoofClippersNotes": "Schneide die Hufe Deiner hart arbeitenden Reittiere, damit sie gesund bleiben während sie Dich ins Abenteuer tragen! Erhöht Stärke, Intelligenz und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Hufschmiedset (Gegenstand 1 von 3).", "weaponArmoireWeaversCombText": "Kamm des Webers", "weaponArmoireWeaversCombNotes": "Verwende diesen Kamm, um Deine Schussfäden zu einem dicht gewebten Stoff zusammenzuschieben. Erhöht Wahrnehmung um <%= per %> und Stärke um <%= str %>. Verzauberter Schrank: Weber-Set (Gegenstand 2 von 3).", "weaponArmoireLamplighterText": "Laternenanzünder", @@ -559,7 +559,7 @@ "armorSpecialWinter2017HealerText": "Schimmernde Blütenblattrüstung", "armorSpecialWinter2017HealerNotes": "Obwohl sie weich ist, bietet diese Rüstung aus Blütenblättern einen fantastischen Schutz! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2016-2017 Winterausrüstung.", "armorSpecialSpring2017RogueText": "Raffinierter Häschenanzug", - "armorSpecialSpring2017RogueNotes": "Weich aber stark, hilft Dir dieser Anzug, besonders heimlich durch Gärten zu schleichen. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2017 Frühlingsausrüstung.", + "armorSpecialSpring2017RogueNotes": "Weich und doch stark, hilft Dir dieser Anzug, besonders heimlich durch Gärten zu schleichen. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2017 Frühlingsausrüstung.", "armorSpecialSpring2017WarriorText": "Pfot-tastische Rüstung", "armorSpecialSpring2017WarriorNotes": "Diese extravagante Rüstung glänzt wie Dein fein gepflegtes Fell, hat aber zusätzlichen Schutz gegen Angriffe. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2017 Frühlingsausrüstung.", "armorSpecialSpring2017MageText": "Hunde-Zauberergewand", @@ -691,7 +691,7 @@ "armorMystery301404Text": "Steampunkanzug", "armorMystery301404Notes": "Adrett und schneidig, hoho! Gewährt keinen Attributbonus. Abonnentengegenstand, Februar 3015.", "armorMystery301703Text": "Steampunk-Pfauen-Robe", - "armorMystery301703Notes": "Dieses elegante Ballkleid ist selbst für die extravaganteste Gala angebracht! Gewährt keinen Attributbonus. Abonnentengegenstand, März 3017. ", + "armorMystery301703Notes": "Dieses elegante Ballkleid ist selbst an der extravagantesten Gala angebracht! Gewährt keinen Attributbonus. Abonnentengegenstand, März 3017. ", "armorMystery301704Text": "Steampunk-Fasanen-Kleid", "armorMystery301704Notes": "Dieses klasse Outfit ist perfekt für eine Nacht unterwegs oder einen Tag in Deiner Bastlerwerkstatt. Gewährt keinen Attributbonus. Abonnentengegenstand, April 3017. ", "armorArmoireLunarArmorText": "Beruhigende Mondrüstung", @@ -701,17 +701,17 @@ "armorArmoireRancherRobesText": "Farmerroben", "armorArmoireRancherRobesNotes": "Treibe Deine Haus- und Reittiere zusammen, während Du dieses zauberhafte Farmergewand trägst. Erhöht Stärke um <%= str %>, Wahrnehmung um <%= per %> und Intelligenz um <%= int %>. Verzauberter Schrank: Viehzüchter-Set (Gegenstand 2 von 3).", "armorArmoireGoldenTogaText": "Goldene Toga", - "armorArmoireGoldenTogaNotes": "Diese schimmernde Toga wird nur von wahren Helden getragen. Erhöht Stärke und Ausdauer jeweils um <%= attrs %>. Verzauberter Schrank: Goldene-Toga-Set (Gegenstand 1 von 3).", + "armorArmoireGoldenTogaNotes": "Diese schimmernde Toga wird nur von wahren Helden getragen. Erhöht Stärke und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Goldene-Toga-Set (Gegenstand 1 von 3).", "armorArmoireHornedIronArmorText": "Gehörnte Eisenrüstung", "armorArmoireHornedIronArmorNotes": "Diese mit Leidenschaft aus Eisen gehämmerte, gehörnte Rüstung ist fast unzerbrechlich. Erhöht Ausdauer um <%= con %> und Wahrnehmung um <%= per %>. Verzauberter Schrank: Gehörntes Eisenset (Gegenstand 2 von 3)", "armorArmoirePlagueDoctorOvercoatText": "Pestarzt-Umhang", "armorArmoirePlagueDoctorOvercoatNotes": "Ein authentischer Umhang wie ihn Ärzte tragen, die die Pest der Prokrastination bekämpfen! Erhöht Intelligenz um <%= int %>, Stärke um <%= str %>, und Ausdauer um <%= con %>. Verzauberter Schrank: Pestarzt-Set (Gegenstand 3 von 3).", "armorArmoireShepherdRobesText": "Hirtengewand", - "armorArmoireShepherdRobesNotes": "Der Stoff ist kühl und atmungsaktiv, perfekt um an heißen Tagen Greife in der Wüste zu hüten. Erhöht Stärke und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Hirten-Set (Gegenstand 2 von 3).", + "armorArmoireShepherdRobesNotes": "Der Stoff ist kühl und atmungsaktiv, perfekt um an heißen Tagen Greife in der Wüste zu hüten. Erhöht Stärke und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Hirten-Set (Gegenstand 2 von 3).", "armorArmoireRoyalRobesText": "Königliche Gewänder", - "armorArmoireRoyalRobesNotes": "Wundervoller Herrscher, herrsche den ganzen Tag! Erhöht Ausdauer, Intelligenz und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Königsset (Gegenstand 3 von 3).", + "armorArmoireRoyalRobesNotes": "Wundervoller Herrscher, herrsche den ganzen Tag! Erhöht Ausdauer, Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Königsset (Gegenstand 3 von 3).", "armorArmoireCrystalCrescentRobesText": "Kristalline Mondsichelroben", - "armorArmoireCrystalCrescentRobesNotes": "Diese magischen Roben leuchten bei Nacht. Erhöht Ausdauer und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Kristallines Mondsichelset (Gegenstand 2 von 3)", + "armorArmoireCrystalCrescentRobesNotes": "Diese magischen Roben leuchten bei Nacht. Erhöht Ausdauer und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Kristallines Mondsichelset (Gegenstand 2 von 3)", "armorArmoireDragonTamerArmorText": "Drachenzähmer-Rüstung", "armorArmoireDragonTamerArmorNotes": "Durch diese robuste Rüstung dringt keine Flamme. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Drachenzähmer-Set (Gegenstand 3 von 3).", "armorArmoireBarristerRobesText": "Richterrobe", @@ -727,21 +727,21 @@ "armorArmoireStripedSwimsuitText": "Gestreifter Badeanzug", "armorArmoireStripedSwimsuitNotes": "Was gibt es schöneres als Seemonster am Strand zu bekämpfen? Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Strandset (Gegenstand 2 von 3).", "armorArmoireCannoneerRagsText": "Kanonierlumpen", - "armorArmoireCannoneerRagsNotes": "Diese Fetzen können stärker sein, als sie aussehen. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Kanonier Set (Gegenstand 2 von 3).", + "armorArmoireCannoneerRagsNotes": "Diese Fetzen können stärker sein, als sie aussehen. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Kanonier-Set (Gegenstand 2 von 3).", "armorArmoireFalconerArmorText": "Falknerrüstung", "armorArmoireFalconerArmorNotes": "Halte Dich mit dieser robusten Rüstung von Klauenangriffen fern! Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Falkner Set (Gegenstand 1 von 3).", "armorArmoireVermilionArcherArmorText": "Zinnoberrote Schützenrüstung", "armorArmoireVermilionArcherArmorNotes": "Diese Rüstung ist aus einem speziell verzauberten roten Metall gemacht für höchsten Schutz, minimale Bewegungseinschränkungen und maximales Flair! Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Zinnoberrotes Bogenschützenset (Gegenstand 2 von 3).", "armorArmoireOgreArmorText": "Ogerrüstung", - "armorArmoireOgreArmorNotes": "Diese Rüstung ist so widerstandsfähig wie Ogerhaut. Für den Komfort wurde sie mit Fell beschichtet. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Oger Outfit (Gegenstand 3 von 3).", + "armorArmoireOgreArmorNotes": "Diese Rüstung ist so widerstandsfähig wie Ogerhaut. Für den Komfort wurde sie mit Fell beschichtet. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Oger-Outfit (Gegenstand 3 von 3).", "armorArmoireIronBlueArcherArmorText": "Eisenblaue Schützenrüstung", "armorArmoireIronBlueArcherArmorNotes": "Diese Rüstung schützt Dich vor herumfliegenden Pfeilen auf dem Schlachtfeld. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Eisenrüstungsset (Gegenstand 2 von 3).", "armorArmoireRedPartyDressText": "Rotes Partygewand", - "armorArmoireRedPartyDressNotes": "Du bist stark, taff, schlau, und so modisch! Erhöht Stärke, Ausdauer und Intelligenz jeweils um <%= attrs %>. Verzauberter Schrank: Rotes Haarschleifen-Set (Gegenstand 2 von 2).", + "armorArmoireRedPartyDressNotes": "Du bist stark, taff, schlau, und so modisch! Erhöht Stärke, Ausdauer und Intelligenz um jeweils <%= attrs %>. Verzauberter Schrank: Rotes Haarschleifen-Set (Gegenstand 2 von 2).", "armorArmoireWoodElfArmorText": "Waldelfenrüstung", "armorArmoireWoodElfArmorNotes": "Diese Rüstung aus Rinde und Blättern dient als langlebige Tarnung im Wald. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Waldelfenset (Gegenstand 2 von 3).", "armorArmoireRamFleeceRobesText": "Widderfellroben", - "armorArmoireRamFleeceRobesNotes": "Diese Gewänder halten Dich auch im heftigsten Schneesturm warm. Erhöht Ausdauer um <%= con %> und Stärke um <%= str %>. Verzauberter Schrank: Festival-Tracht Set (Gegenstand 2 von 3).", + "armorArmoireRamFleeceRobesNotes": "Diese Gewänder halten Dich auch im heftigsten Schneesturm warm. Erhöht Ausdauer um <%= con %> und Stärke um <%= str %>. Verzauberter Schrank: Widder-Barbar-Set (Gegenstand 2 von 3).", "armorArmoireGownOfHeartsText": "Herzkleid", "armorArmoireGownOfHeartsNotes": "Dieses Kleid hat alles, was Du brauchst! Aber das ist nicht alles, es wird auch die Stärke Deines Herzens steigern. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Herzkönigin Set (Gegenstand 2 von 3).", "armorArmoireMushroomDruidArmorText": "Pilzdruiden-Rüstung", @@ -753,13 +753,13 @@ "armorArmoireVikingTunicText": "Wikinger-Tunika", "armorArmoireVikingTunicNotes": "Zu dieser warmen, wollenen Tunika gehört auch ein Umhang für zusätzliche Behaglichkeit selbst bei stürmischer See. Erhöht Ausdauer um <%= con %> und Stärke um <%= str %>. Verzauberter Schrank: Wikingerset (Gegenstand 1 von 3).", "armorArmoireSwanDancerTutuText": "Schwanentänzer-Tutu", - "armorArmoireSwanDancerTutuNotes": "Du könntest geradewegs in die Luft entschweben, wenn Du in diesem prachtvollen Federtutu Pirouetten drehst. Erhöht Intelligenz und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Schwanentänzer-Set (Gegenstand 2 von 3).", + "armorArmoireSwanDancerTutuNotes": "Du könntest geradewegs in die Luft entschweben, wenn Du in diesem prachtvollen Federtutu Pirouetten drehst. Erhöht Intelligenz und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Schwanentänzer-Set (Gegenstand 2 von 3).", "armorArmoireAntiProcrastinationArmorText": "Anti-Aufschieberitis-Rüstung", "armorArmoireAntiProcrastinationArmorNotes": "Getränkt mit alten Produktivitäts-Zaubersprüchen, verleiht Dir diese stählerne Rüstung zusätzliche Stärke im Kampf mit Deinen Aufgaben. Erhöht Stärke um <%= str %>.Verzauberter Schrank: Anti-Aufschieberitis-Set (Gegenstand 2 von 3).", "armorArmoireYellowPartyDressText": "Gelbes Partygewand", "armorArmoireYellowPartyDressNotes": "Du bist scharfsinnig, stark, schlau, und unglaublich schick! Erhöht Wahrnehmung, Stärke und Intelligenz um jeweils <%= attrs %>. Verzauberter Schrank: Gelbes Haarschleifen-Set (Gegenstand 2 von 2).", "armorArmoireFarrierOutfitText": "Hufschmiedoutfit", - "armorArmoireFarrierOutfitNotes": "Diese robuste Arbeitskleidung hält dem unordentlichsten Stall stand. Erhöht Intelligenz, Ausdauer und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Hufschmiedset (Gegenstand 2 von 3).", + "armorArmoireFarrierOutfitNotes": "Diese robuste Arbeitskleidung hält dem unordentlichsten Stall stand. Erhöht Intelligenz, Ausdauer und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Hufschmiedset (Gegenstand 2 von 3).", "armorArmoireCandlestickMakerOutfitText": "Kerzenmachergewand", "armorArmoireCandlestickMakerOutfitNotes": "Dieses robuste Kleidungsstück schützt Dich vor heißem Kerzenwachs, während Du Deinem Handwerk nachgehst. Erhöht Ausdauer um<%= con %>. Verzauberter Schrank: Kerzenmacher-Set (Gegenstand 1 von 3).", "armorArmoireWovenRobesText": "Gewebte Robe", @@ -771,13 +771,13 @@ "armorArmoireRobeOfDiamondsText": "Diamantenrobe", "armorArmoireRobeOfDiamondsNotes": "Diese königlichen Roben lassen dich nicht nur nobel aussehen, sie gewähren dir auch Einblick in die Vornehmheit anderer. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Diamantkönig Set (Item 1 von 4).", "armorArmoireFlutteryFrockText": "Flatterndes Kleid", - "armorArmoireFlutteryFrockNotes": "Ein leichtes und luftiges Kleid mit einem breiten Rock, den die Schmetterlinge für eine Riesenblüte halten könnten! Erhöht Ausdauer, Wahrnehmung und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Flatterndes Frack-Set (Gegenstand 1 von 4).", + "armorArmoireFlutteryFrockNotes": "Ein leichtes und luftiges Kleid mit einem breiten Rock, den Schmetterlinge für eine Riesenblüte halten könnten! Erhöht Ausdauer, Wahrnehmung und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Flatterndes Frack-Set (Gegenstand 1 von 4).", "armorArmoireCobblersCoverallsText": "Schuster-Overall", - "armorArmoireCobblersCoverallsNotes": "Diese robusten Overalls haben viele Taschen für Werkzeuge, Lederreste und andere nützliche Gegenstände! Erhöht Wahrnehmung und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Schuster-Set (Gegenstand 1 von 3).", + "armorArmoireCobblersCoverallsNotes": "Dieser robuste Overall hat viele Taschen für Werkzeuge, Lederreste und andere nützliche Gegenstände! Erhöht Wahrnehmung und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Schuster-Set (Gegenstand 1 von 3).", "armorArmoireGlassblowersCoverallsText": "Glasbläser-Overall", - "armorArmoireGlassblowersCoverallsNotes": "Dieser Overall schützt Dich, während Du Meisterwerke aus heißem, geschmolzenem Glas herstellst. Erhöht Ausdauer und Stärke jeweils um <%= con %>. Verzauberter Schrank: Glasbläser-Set (Gegenstand 2 von 4).", + "armorArmoireGlassblowersCoverallsNotes": "Dieser Overall schützt Dich, während Du Meisterwerke aus heißem, geschmolzenem Glas herstellst. Erhöht Ausdauer und Stärke um jeweils <%= con %>. Verzauberter Schrank: Glasbläser-Set (Gegenstand 2 von 4).", "armorArmoireBluePartyDressText": "Blauer Partydress", - "armorArmoireBluePartyDressNotes": "Du bist scharfsinnig, zäh, klug und so modisch! Erhöht Wahrnehmung, Stärke und Ausdauer jeweils um <%= attrs %>. Verzauberter Schrank: Blaues Haarschleifen-Set (Gegenstand 2 von 2).", + "armorArmoireBluePartyDressNotes": "Du bist scharfsinnig, zäh, klug und so modisch! Erhöht Wahrnehmung, Stärke und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Blaues Haarschleifen-Set (Gegenstand 2 von 2).", "armorArmoirePiraticalPrincessGownText": "Piratiges Prinzessinnen-Gewand", "armorArmoirePiraticalPrincessGownNotes": "Dieses luxuriöse Kleidungsstück hat viele Taschen, um Waffen und Beute zu verstecken! Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Piratiges Prinzessinnen-Set (Gegenstand 2 von 4).", "armorArmoireJeweledArcherArmorText": "Juwelenbesetzte Bogenschützen-Rüstung", @@ -845,7 +845,7 @@ "headSpecialPyromancersTurbanText": "Turban des Feuerkundlers", "headSpecialPyromancersTurbanNotes": "Dieser magische Turban erleichtert Dir das Atmen selbst im dicksten Qualm! Super kuschelig ist er auch! Erhöht Stärke um <%= str %>.", "headSpecialBardHatText": "Bardenmütze", - "headSpecialBardHatNotes": "Stecke eine Feder an deine Mütze und nenne es \"Produktivität\"! Erhöht Intelligenz um <%= int %>.", + "headSpecialBardHatNotes": "Stecke eine Feder an Deine Mütze und nenne es \"Produktivität\"! Erhöht Intelligenz um <%= int %>.", "headSpecialLunarWarriorHelmText": "Mondkriegerhelm", "headSpecialLunarWarriorHelmNotes": "Die Kraft des Mondes wird Dich im Kampf stärken! Erhöht die Stärke und Intelligenz um jeweils <%= attrs %>.", "headSpecialMammothRiderHelmText": "Mammutreiter-Helm", @@ -1143,7 +1143,7 @@ "headArmoireRoyalCrownText": "Königliche Krone", "headArmoireRoyalCrownNotes": "Ein Hoch auf den mächtigen und starken Herrscher! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Königsset (Gegenstand 1 von 3).", "headArmoireGoldenLaurelsText": "Goldene Lorbeeren", - "headArmoireGoldenLaurelsNotes": "Diese goldenen Lorbeeren dienen als Belohnung für diejenigen, die schlechte Gewohnheiten besiegt haben. Erhöht Wahrnehmung und Ausdauer jeweils um <%= attrs %>. Verzauberter Schrank: Goldene-Toga-Set (Gegenstand 2 von 3).", + "headArmoireGoldenLaurelsNotes": "Diese goldenen Lorbeeren dienen als Belohnung für diejenigen, die schlechte Gewohnheiten besiegt haben. Erhöht Wahrnehmung und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Goldene-Toga-Set (Gegenstand 2 von 3).", "headArmoireHornedIronHelmText": "Gehörnter Eisenhelm", "headArmoireHornedIronHelmNotes": "Dieser mit Leidenschaft aus Eisen gehämmerte, gehörnte Helm ist fast unzerbrechlich. Erhöht Ausdauer um <%= con %> und Stärke um <%= str %>. Verzauberter Schrank: Gehörntes Eisenset (Gegenstand 1 von 3).", "headArmoireYellowHairbowText": "Gelbe Haarschleife", @@ -1155,13 +1155,13 @@ "headArmoireBlackCatText": "Schwarzer Katzenhut", "headArmoireBlackCatNotes": "Dieser schwarze Hut ... schnurrt. Und sein Schwanz zuckt. Und er atmet? Okay, Du hast einfach bloß eine schlafende Katze auf dem Kopf. Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "headArmoireOrangeCatText": "Orangener Katzenhut", - "headArmoireOrangeCatNotes": "Dieser orangene Hut ... schnurrt. Und sein Schwanz zuckt. Und er atmet? Okay, Du hast einfach bloß eine schlafende Katze auf dem Kopf. Erhöht Stärke und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.", + "headArmoireOrangeCatNotes": "Dieser orangene Hut... schnurrt. Und sein Schwanz zuckt. Und er atmet? Okay, Du hast einfach eine schlafende Katze auf dem Kopf. Erhöht Stärke und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "headArmoireBlueFloppyHatText": "Blauer Schlapphut", "headArmoireBlueFloppyHatNotes": "Viele Zaubersprüche wurden auf diesen Hut gewirkt, um ihm seine strahlend blaue Farbe zu geben. Erhöht Ausdauer, Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Blaues Loungewear-Set (Gegenstand 1 von 3).", "headArmoireShepherdHeaddressText": "Kopfschmuck des Hirten", "headArmoireShepherdHeaddressNotes": "Manchmal lieben es die Greifen, die Du hütest, auf dieser Kopfbedeckung herumzukauen, aber Du wirkst damit nichtsdestotrotz intelligenter. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Hirten-Set (Gegenstand 3 von 3).", "headArmoireCrystalCrescentHatText": "Kristalliner Mondsichelhut", - "headArmoireCrystalCrescentHatNotes": "Das Design auf diesem Hut nimmt mit den Mondphasen zu und ab. Erhöht Intelligenz und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Kristallines Mondsichelset (Gegenstand 1 von 3).", + "headArmoireCrystalCrescentHatNotes": "Das Design auf diesem Hut nimmt mit den Mondphasen zu und ab. Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Kristallines Mondsichelset (Gegenstand 1 von 3).", "headArmoireDragonTamerHelmText": "Drachenzähmer-Helm", "headArmoireDragonTamerHelmNotes": "Du siehst genau wie ein Drache aus. Die perfekte Tarnung ... Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Drachenzähmer-Set (Gegenstand 1 von 3).", "headArmoireBarristerWigText": "Richterperücke", @@ -1176,20 +1176,20 @@ "headArmoireGraduateCapNotes": "Gratulation! Für Dein tiefes Nachdenken hast Du diese Denkkappe erhalten. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Doktoranden-Set (Gegenstand 3 von 3).", "headArmoireGreenFloppyHatText": "Grüner Schlapphut", "headArmoireGreenFloppyHatNotes": "Viele Zaubersprüche wurden auf diesen Hut gewirkt, um ihm seine prächtige grüne Frabe zu verleihen. Erhöht Ausdauer, Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.", - "headArmoireCannoneerBandannaText": "Kanonier Bandana", - "headArmoireCannoneerBandannaNotes": "Das Kanonieren ist mein Leben! Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Kanonier Set (Gegenstand 3 von 3).", + "headArmoireCannoneerBandannaText": "Kanonier-Bandana", + "headArmoireCannoneerBandannaNotes": "Das Kanonieren ist mein Leben! Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Kanonier-Set (Gegenstand 3 von 3).", "headArmoireFalconerCapText": "Falknerkappe", "headArmoireFalconerCapNotes": "Diese lustige Kappe lässt Dich Greifvögel besser verstehen. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Falkner Set (Gegenstand 2 von 3). ", "headArmoireVermilionArcherHelmText": "Zinnoberroter Schützenhelm", "headArmoireVermilionArcherHelmNotes": "Der magische Rubin in diesem Helm wird Dir zur Zielgenauigkeit eines Lasers verhelfen! Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Zinnoberrotes Bogenschützenset (Gegenstand 3 von 3).", "headArmoireOgreMaskText": "Ogermaske", - "headArmoireOgreMaskNotes": "Deine Feinde werden um ihr Leben rennen, wenn sie einen Oger auf sich zukommen sehen. Erhöht Ausdauer und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Oger Outfit (Gegenstand 1 von 3).", + "headArmoireOgreMaskNotes": "Deine Feinde werden um ihr Leben rennen, wenn sie einen Oger auf sich zukommen sehen. Erhöht Ausdauer und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Oger-Outfit (Gegenstand 1 von 3).", "headArmoireIronBlueArcherHelmText": "Eisenblauer Schützenhelm", "headArmoireIronBlueArcherHelmNotes": "DIckschädel? Nein, Du bist lediglich gut geschützt. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Eisenschützen-Set (Gegenstand 1 von 3).", "headArmoireWoodElfHelmText": "Waldelfenhelm", "headArmoireWoodElfHelmNotes": "Dieser Helm aus Blättern mag zerbrechlich aussehen, aber er schützt Dich vor rauem Wetter und gefährlichen Feinden. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Waldelfenset (Gegenstand 1 von 3).", "headArmoireRamHeaddressText": "Widder-Kopfschmuck", - "headArmoireRamHeaddressNotes": "Dieser komplizierte Helm wurde gestaltet, um wie ein Widderkopf auszusehen. Erhöht Ausdauer um <%= con %> und Wahrnehmung um <%= per %>. Verzauberter Schrank: Widder-Barbar Set (Gegenstand 1 von 3).", + "headArmoireRamHeaddressNotes": "Dieser ausgeklügelte Helm wurde gestaltet, um wie ein Widderkopf auszusehen. Erhöht Ausdauer um <%= con %> und Wahrnehmung um <%= per %>. Verzauberter Schrank: Widder-Barbar-Set (Gegenstand 1 von 3).", "headArmoireCrownOfHeartsText": "Herzkrone", "headArmoireCrownOfHeartsNotes": "Diese rosenrote Krone ist nicht nur ein Blickfang! Sie wird auch Dein Herz für schwierige Aufgaben stärken. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Herzkönigin Set (Gegenstand 1 von 3).", "headArmoireMushroomDruidCapText": "Pilz-Druidenkappe", @@ -1203,7 +1203,7 @@ "headArmoireAntiProcrastinationHelmText": "Anti-Aufschieberitis-Helm", "headArmoireAntiProcrastinationHelmNotes": "Dieser mächtige Stahlhelm wird Dir dabei helfen, den Kampf zu gewinnen, um gesund, glücklich und produktiv zu sein! Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Anti-Aufschieberitis-Set (Gegenstand 1 von 3).", "headArmoireCandlestickMakerHatText": "Kerzenmacherhut", - "headArmoireCandlestickMakerHatNotes": "Mit einem flotten Hut macht jeder Job mehr Spaß und die Kerzenmacherei ist da keine Ausnahme! Erhöht Wahrnehmung und Intelligenz jeweils um<%= attrs %>. Verzauberter Schrank: Kerzenmacher-Set (Gegenstand 2 von 3).", + "headArmoireCandlestickMakerHatNotes": "Mit einem flotten Hut macht jeder Job mehr Spaß und die Kerzenmacherei ist da keine Ausnahme! Erhöht Wahrnehmung und Intelligenz um jeweils <%= attrs %>. Verzauberter Schrank: Kerzenmacher-Set (Gegenstand 2 von 3).", "headArmoireLamplightersTopHatText": "Laternenanzünder-Zylinder", "headArmoireLamplightersTopHatNotes": "Dieser flotte, schwarze Hut komplettiert Dein Laternenanzünder-Outfit! Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Laternenanzünder-Set ( Gegenstand 3 von 4).", "headArmoireCoachDriversHatText": "Hut des Kutschers", @@ -1221,7 +1221,7 @@ "headArmoireGlassblowersHatText": "Glasbläser-Hut", "headArmoireGlassblowersHatNotes": "Dieser Hut sieht einfach gut aus mit Deiner Glasbläser-Schutzausrüstung! Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Glasbläser-Set (Gegenstand 3 von 4).", "headArmoirePiraticalPrincessHeaddressText": "Piratiger Prinzessinnen-Kopfschmuck", - "headArmoirePiraticalPrincessHeaddressNotes": "Ausgefallene Seeräuber sind bekannt für ihre ausgefallene Kopfbedeckung! Erhöht Wahrnehmung und Intelligenz jeweils um <%= attrs %>. Verzauberter Schrank: Piratiges Prinzessinnen-Set (Gegenstand 1 von 4).", + "headArmoirePiraticalPrincessHeaddressNotes": "Ausgefallene Seeräuber sind bekannt für ihre ausgefallene Kopfbedeckung! Erhöht Wahrnehmung und Intelligenz um jeweils <%= attrs %>. Verzauberter Schrank: Piratiges Prinzessinnen-Set (Gegenstand 1 von 4).", "headArmoireJeweledArcherHelmText": "Juwelenbesetzter Bogenschützen-Helm", "headArmoireJeweledArcherHelmNotes": "Dieser Helm mag kunstvoll aussehen, ist aber auch äußerst leicht und stark. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Juwelenbesetztes Bogenschützen-Set (Gegenstand 1 von 3).", "headArmoireVeilOfSpadesText": "Pik-Schleier", @@ -1257,7 +1257,7 @@ "shieldSpecialTakeThisText": "Take This-Schild", "shieldSpecialTakeThisNotes": "Dieser Schild wurde durch die Teilnahme an einem von Take This gesponserten Wettbewerb verdient. Glückwunsch! Erhöht alle Attribute um <%= attrs %>.", "shieldSpecialGoldenknightText": "Mustaines Meilenstein-matschender Morgenstern", - "shieldSpecialGoldenknightNotes": "Konferenzen, Kreaturen, Krankheit: Alles erledigt! Zerstampft! Erhöht Ausdauer und Wahrnehmung jeweils um <%= attrs %>.", + "shieldSpecialGoldenknightNotes": "Konferenzen, Kreaturen, Krankheit: Alles erledigt! Zerstampft! Erhöht Ausdauer und Wahrnehmung um jeweils <%= attrs %>.", "shieldSpecialMoonpearlShieldText": "Mondperlenschild", "shieldSpecialMoonpearlShieldNotes": "Für schnelles Schwimmen entworfen und auch ein bisschen zur Verteidigung. Erhöht Ausdauer um <%= con %>.", "shieldSpecialMammothRiderHornText": "Mammutreiter-Horn", @@ -1357,9 +1357,9 @@ "shieldSpecialSummer2017RogueText": "Seedrachenflosse", "shieldSpecialSummer2017RogueNotes": "Der Rand dieser Flosse ist rasiermesserscharf. Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2017 Sommerausrüstung.", "shieldSpecialSummer2017WarriorText": "Jakobsmuschel-Schild", - "shieldSpecialSummer2017WarriorNotes": "Diese Muschel, die Du gerade gefunden hast ist sowohl dekorativ UND abwehrend. Erhöht Deine Ausdauer um <%= con %>. Limitierte Ausgabe der Sommerausrüstung 2017.", + "shieldSpecialSummer2017WarriorNotes": "Diese Muschel, die Du gerade gefunden hast, ist sowohl dekorativ UND abwehrend. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe der Sommerausrüstung 2017.", "shieldSpecialSummer2017HealerText": "Auster-Schild", - "shieldSpecialSummer2017HealerNotes": "Diese magische Auster erzeugt andauernd Perlen genauso wie Schutz. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2017 Sommerausrüstung.", + "shieldSpecialSummer2017HealerNotes": "Diese magische Auster erzeugt andauernd Perlen sowie Schutz. Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2017 Sommerausrüstung.", "shieldSpecialFall2017RogueText": "Kandierte Apfelkeule", "shieldSpecialFall2017RogueNotes": "Besiege deine Gegner mit Süße! Erhöht Stärke um<%= str %>. Limitierte Ausgabe 2017 Herbstausrüstung.", "shieldSpecialFall2017WarriorText": "Zuckermaisschild", @@ -1405,7 +1405,7 @@ "shieldArmoireMidnightShieldText": "Mitternachtsschild", "shieldArmoireMidnightShieldNotes": "Dieser Schild ist am mächtigsten um Punkt Mitternacht! Erhöht Ausdauer um <%= con %> und Stärke um <%= str %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "shieldArmoireRoyalCaneText": "Königlicher Stock", - "shieldArmoireRoyalCaneNotes": "Ein Hoch auf den besungenen Herrscher! Erhöht Ausdauer, Intelligenz und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Königsset (Gegenstand 2 von 3).", + "shieldArmoireRoyalCaneNotes": "Ein Hoch auf den besungenen Herrscher! Erhöht Ausdauer, Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Königsset (Gegenstand 2 von 3).", "shieldArmoireDragonTamerShieldText": "Drachenzähmer-Schild", "shieldArmoireDragonTamerShieldNotes": "Lenke Deine Feinde mit diesem Schild in Drachenform ab. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Drachenzähmer-Set (Gegenstand 2 von 3).", "shieldArmoireMysticLampText": "Wunderlampe", @@ -1417,7 +1417,7 @@ "shieldArmoirePerchingFalconText": "Sitzender Falke", "shieldArmoirePerchingFalconNotes": "Ein Falke sitzt auf Deinem Arm, bereit sich auf Deine Feinde zu stürzen. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Falkner Set (Gegenstand 3 von 3).", "shieldArmoireRamHornShieldText": "Widderhornschild", - "shieldArmoireRamHornShieldNotes": "Ramme diesen Schild in feindliche Tägliche Aufgaben! Erhöht Ausdauer und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Widder-Barbar Set (Gegenstand 3 von 3).", + "shieldArmoireRamHornShieldNotes": "Ramme diesen Schild in feindliche Tagesaufgaben! Erhöht Ausdauer und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Widder-Barbar-Set (Gegenstand 3 von 3).", "shieldArmoireRedRoseText": "Rote Rose", "shieldArmoireRedRoseNotes": "Diese rote Rose riecht bezaubernd. Sie wird außerdem Deinen Verstand schärfen. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "shieldArmoireMushroomDruidShieldText": "Pilzdruiden-Schild", @@ -1429,11 +1429,11 @@ "shieldArmoireSwanFeatherFanText": "Schwanenfederfächer", "shieldArmoireSwanFeatherFanNotes": "Verwende diesen Fächer, um Deine Bewegungen zu unterstreichen, während Du anmutig wie ein Schwan tanzt. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Schwanentänzer-Set (Gegenstand 3 von 3).", "shieldArmoireGoldenBatonText": "Goldener Taktstock", - "shieldArmoireGoldenBatonNotes": "Wenn du in einen Kampf tänzelst und mit diesem Taktstock zum Beat schlägst, dann bist du nicht zu stoppen! Erhöht Intelligenz und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.", + "shieldArmoireGoldenBatonNotes": "Wenn Du in einen Kampf tänzelst und mit diesem Taktstock zum Beat schlägst, dann bist Du nicht zu stoppen! Erhöht Intelligenz und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.", "shieldArmoireAntiProcrastinationShieldText": "Anti-Aufschieberitis-Schild", "shieldArmoireAntiProcrastinationShieldNotes": "Mit diesem starken Stahlschild wehrst Du Ablenkungen ab, sobald sie sich nähern! Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Anti-Aufschieberitis-Set (Gegenstand 3 von 3).", "shieldArmoireHorseshoeText": "Hufeisen", - "shieldArmoireHorseshoeNotes": "Schütze die Hufe Deiner Reittiere mit diesem Hufeisen. Erhöht Ausdauer, Wahrnehmung und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Hufschmiedset (Gegenstand 3 von 3).", + "shieldArmoireHorseshoeNotes": "Schütze die Hufe Deiner Reittiere mit diesem Hufeisen. Erhöht Ausdauer, Wahrnehmung und Stärke um jeweils <%= attrs %>. Verzauberter Schrank: Hufschmiedset (Gegenstand 3 von 3).", "shieldArmoireHandmadeCandlestickText": "Handgearbeitete Kerze", "shieldArmoireHandmadeCandlestickNotes": "Deine feinen Wachswaren spenden den dankbaren Habiticanern Licht und Wärme! Erhöht Stärke um <%= str %>. Verzauberter Schrank: Kerzenmacher-Set (Gegenstand 3 von 3).", "shieldArmoireWeaversShuttleText": "Schiffchen des Webers", @@ -1443,11 +1443,11 @@ "shieldArmoireFlutteryFanText": "Flatterfächer", "shieldArmoireFlutteryFanNotes": "An einem heißen Tag geht nichts über einen schicken Fächer, der Dich nicht ins Schwitzen kommen lässt. Erhöht Ausdauer, Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Flatterndes Frack-Set (Gegenstand 4 von 4).", "shieldArmoireFancyShoeText": "Schicker Schuh", - "shieldArmoireFancyShoeNotes": "Ein ganz besonderer Schuh, an dem Du arbeitest. Er ist eines Königs würdig! Erhöht Intelligenz und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Schuster-Set (Gegenstand 3 von 3).", + "shieldArmoireFancyShoeNotes": "Ein ganz besonderer Schuh, an dem Du arbeitest. Er ist eines Königs würdig! Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Schuster-Set (Gegenstand 3 von 3).", "shieldArmoireFancyBlownGlassVaseText": "Schicke mundgeblasene Vase", "shieldArmoireFancyBlownGlassVaseNotes": "Was für eine schicke Vase hast Du da gemacht! Was wirst Du da rein tun? Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Glasbläser-Set (Gegenstand 4 von 4).", "shieldArmoirePiraticalSkullShieldText": "Piratige Schädelhaube", - "shieldArmoirePiraticalSkullShieldNotes": "Dieser verzauberte Schild wird die geheimen Orte der Schätze Deiner Feinde flüstern - hör genau hin! Erhöht Wahrnehmung und Intelligenz jeweils um <%= attrs %>. Verzauberter Schrank: Piratiges Prinzessinnen-Set (Gegenstand 4 von 4).", + "shieldArmoirePiraticalSkullShieldNotes": "Dieser verzauberte Schild wird die geheimen Orte der Schätze Deiner Feinde flüstern - hör genau hin! Erhöht Wahrnehmung und Intelligenz um jeweils <%= attrs %>. Verzauberter Schrank: Piratiges Prinzessinnen-Set (Gegenstand 4 von 4).", "shieldArmoireUnfinishedTomeText": "Unfertiger Foliant", "shieldArmoireUnfinishedTomeNotes": "Du kannst einfach nichts aufschieben, wenn Du das hier hältst! Die Bindung muss fertig gestellt werden, damit die Leute das Buch lesen können! Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Buchbinder-Set (Gegenstand 4 von 4).", "shieldArmoireSoftBluePillowText": "Weiches Blaues Kissen", @@ -1466,7 +1466,7 @@ "backMystery201504Text": "Bienenflügel", "backMystery201504Notes": "Summ summ summ! Schwirre von Aufgabe zu Aufgabe. Gewährt keinen Attributbonus. Abonnentengegenstand, April 2015.", "backMystery201507Text": "Cooles Surfboard", - "backMystery201507Notes": "Surfe die Fleißigen Docks herunten und reite die Wellen der Unvollständigkeitsbucht! Gewährt keinen Attributbonus. Abonnentengegenstand, Juli 2015.", + "backMystery201507Notes": "Surfe vor dem Hafen von Diligent und reite die Wellen der Unfertik-Bucht! Gewährt keinen Attributbonus. Abonnentengegenstand, Juli 2015.", "backMystery201510Text": "Koboldschwanz", "backMystery201510Notes": "Zum Greifen geeignet und mächtig! Gewährt keinen Attributbonus. Abonnentengegenstand, Oktober 2015.", "backMystery201602Text": "Herzensbrecher-Umhang", @@ -1474,7 +1474,7 @@ "backMystery201608Text": "Donnerumhang", "backMystery201608Notes": "Fliege über den stürmischen Himmel mit diesem aufgeblähten Umhang! Gewährt keinen Attributbonus. Abonnentengegenstand, August 2016.", "backMystery201702Text": "Herzensstehler-Umhang", - "backMystery201702Notes": "Ein Rascheln dieses Umhangs und alle in Deiner Nähe werden von deinem Charm umgehauen! Gewährt keinen Attributbonus. Abonnentengegenstand, Februar 2017.", + "backMystery201702Notes": "Ein Rascheln dieses Umhangs und alle in Deiner Nähe werden von Deinem Charme umgehauen! Gewährt keinen Attributbonus. Abonnentengegenstand, Februar 2017.", "backMystery201704Text": "Märchenhafte Feenflügel", "backMystery201704Notes": "Diese schimmernden Flügel werden Dich überall hintragen, sogar bis in die versteckten Reiche, die von magischen Kreaturen beherrscht werden. Gewährt keinen Attributbonus. Abonnentengegenstand, April 2017.", "backMystery201706Text": "Zerfetzte Freibeuter-Flagge", @@ -1520,7 +1520,7 @@ "backWolfTailText": "Wolfsschwanz", "backWolfTailNotes": "Dieser Schwanz verleiht Dir das Aussehen eines loyalen Wolfes! Gewährt keinen Attributbonus.", "body": "Körperaccessoire", - "bodyCapitalized": "Rückenaccessoire", + "bodyCapitalized": "Körperaccessoire", "bodyBase0Text": "Kein Kleidungsschmuck", "bodyBase0Notes": "Kein Kleidungsschmuck.", "bodySpecialWonderconRedText": "Rubinkragen", @@ -1552,9 +1552,9 @@ "bodyMystery201706Text": "Zerlumpter Korsarenumhang", "bodyMystery201706Notes": "Dieser Umhang hat geheime Taschen um all das Gold zu verstecken, dass Du von Deinen Aufgaben erbeutet hast. Gewährt keinen Attributbonus. Abonnentengegenstand, Juni 2017.", "bodyMystery201711Text": "Teppichreiterschal", - "bodyMystery201711Notes": "Dieser weiche Schal sieht sehr majestätisch aus wenn er sich leicht im Wind bewegt. Gewährt keinen Attributbonus. Abonnentengegenstand, November 2017.", + "bodyMystery201711Notes": "Dieser weiche gestrickte Schal sieht sehr majestätisch aus wenn er sich leicht im Wind bewegt. Gewährt keinen Attributbonus. Abonnentengegenstand, November 2017.", "bodyArmoireCozyScarfText": "Gemütlicher Schal", - "bodyArmoireCozyScarfNotes": "Dieser feine Schal hält Dich warm, während Du Deinen winterlichen nachgehst. Erhöht Ausdauer und Wahrnehmung jeweils um <%= attrs %>. Verzauberter Schrank: Laternenanzünder-Set ( Gegenstand 4 von 4).", + "bodyArmoireCozyScarfNotes": "Dieser feine Schal hält Dich warm, während Du Deinen winterlichen Geschäften nachgehst. Erhöht Ausdauer und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Laternenanzünder-Set ( Gegenstand 4 von 4).", "headAccessory": "Kopfschmuck", "headAccessoryCapitalized": "Kopfschmuck", "accessories": "Accessoires", diff --git a/website/common/locales/de/groups.json b/website/common/locales/de/groups.json index 96ecd220ab..42091c25ee 100644 --- a/website/common/locales/de/groups.json +++ b/website/common/locales/de/groups.json @@ -116,7 +116,7 @@ "sortTier": "Nach Rang sortieren", "ascendingAbbrev": "Aufsteigend", "descendingAbbrev": "Absteigend", - "applySortToHeader": "Apply Sort Options to Party Header", + "applySortToHeader": "Sortieroptionen auf die Party-Kopfzeile anwenden", "confirmGuild": "Gilde für 4 Edelsteine gründen?", "leaveGroupCha": "Gildenwettbewerbe verlassen und ...", "confirm": "Bestätigen", @@ -142,7 +142,7 @@ "PMDisabledCaptionText": "Du kannst weiterhin Nachrichten versenden, aber Dir können keine zugeschickt werden.", "block": "Sperren", "unblock": "Entsperren", - "blockWarning": "Block - This will have no effect if the player is a moderator now or becomes a moderator in future.", + "blockWarning": "Sperre - Dies hat keine Auswirkung, wenn der Spieler jetzt Moderator ist oder in Zukunft Moderator wird.", "pm-reply": "Eine Antwort schicken", "inbox": "Postfach", "messageRequired": "Eine Nachricht wird benötigt.", @@ -226,7 +226,7 @@ "memberCannotRemoveYourself": "Du kannst Dich nicht selbst entfernen!", "groupMemberNotFound": "Benutzer nicht unter den Team-Mitgliedern gefunden", "mustBeGroupMember": "Muss ein Mitglied des Teams sein.", - "canOnlyInviteEmailUuid": "Can only invite using user IDs, emails, or usernames.", + "canOnlyInviteEmailUuid": "Du kannst nur über Benutzer ID, E-Mail oder Benutzernamen einladen.", "inviteMissingEmail": "Fehlende E-Mail-Adresse zum Einladen.", "inviteMissingUuid": "User-ID in der Einladung fehlt", "inviteMustNotBeEmpty": "Einladung muss Daten enthalten", @@ -242,7 +242,7 @@ "userHasNoLocalRegistration": "Benutzer ist lokal nicht registriert (Benutzername, E-Mail, Passwort).", "uuidsMustBeAnArray": "Benutzer-ID-Einladungen müssen ein Array sein.", "emailsMustBeAnArray": "E-Mail-Adress-Einladungen müssen ein Array sein.", - "usernamesMustBeAnArray": "Username invites must be an array.", + "usernamesMustBeAnArray": "Benutzernamen-Einladungen müssen ein Array sein.", "canOnlyInviteMaxInvites": "Du kannst nur \"<%= maxInvites %>\" Benutzer gleichzeitig einladen", "partyExceedsMembersLimit": "Die Gruppengröße ist begrenzt auf <%= maxMembersParty %> Mitglieder", "onlyCreatorOrAdminCanDeleteChat": "Löschen der Nachricht nicht erlaubt!", @@ -279,9 +279,9 @@ "claim": "Anspruch", "removeClaim": "Anspruch abtreten", "onlyGroupLeaderCanManageSubscription": "Nur der Team-Leiter kann Team-Registrierungen verwalten", - "yourTaskHasBeenApproved": "Your task <%= taskText %> has been approved.", - "taskNeedsWork": "<%= managerName %> marked <%= taskText %> as needing additional work.", - "userHasRequestedTaskApproval": "<%= user %> requests approval for <%= taskName %>", + "yourTaskHasBeenApproved": "Deine Aufgabe <%= taskText %> wurde akzeptiert.", + "taskNeedsWork": "<%= managerName %> hat <%= taskText %> als unfertig markiert.", + "userHasRequestedTaskApproval": "<%= user %> bittet um Genehmigung für <%= taskName %>.", "approve": "Zustimmen", "approveTask": "Aufgabe zustimmen", "needsWork": "Benötigt Arbeit", @@ -324,7 +324,7 @@ "approvalsTitle": "Aufgaben-Zustimmung erwartet", "upgradeTitle": "Upgrade", "blankApprovalsDescription": "Wenn Dein Team Aufgaben erledigt, die deine Zustimmung brauchen, erscheinen sie hier! Passe die Zustimmungs-Einstellungen in den Aufgaben an.", - "userIsClamingTask": "`<%= username %> has claimed:` <%= task %>", + "userIsClamingTask": "`<%= username %> beansprucht:` <%= task %>", "approvalRequested": "Zustimmung erbeten", "refreshApprovals": "Zustimmungen aktualisieren", "refreshGroupTasks": "Team-Aufgaben aktualisieren", @@ -341,9 +341,9 @@ "confirmCancelGroupPlan": "Bist Du Dir sicher, dass du den Team-Plan abbrechen möchtest und damit alle Team-Mitglieder dessen Vorteile verlieren, unter anderem auch ihre freien Abonnements?", "canceledGroupPlan": "Abgebrochener Team-Plan", "groupPlanCanceled": "Der Team-Plan wird inaktiv am", - "purchasedGroupPlanPlanExtraMonths": "Du hast <%= months %> Monate zusätzliches Gruppenplan-Guthaben", - "addManager": "Assign Manager", - "removeManager2": "Unassign Manager", + "purchasedGroupPlanPlanExtraMonths": "Du hast <%= months %> Monate zusätzliches Gruppenplan-Guthaben.", + "addManager": "Organistator zuweisen", + "removeManager2": "Organisator-Zuordnung aufheben", "userMustBeMember": "Der Nutzer muss ein Mitglied sein", "userIsNotManager": "Der Nutzer ist kein Organisator", "canOnlyApproveTaskOnce": "Diese Aufgabe wurde bereits akzeptiert.", @@ -364,9 +364,9 @@ "joinGuild": "Der Gilde Beitreten", "inviteToGuild": "In Gilde Einladen", "inviteToParty": "In die Gruppe einladen", - "inviteEmailUsername": "Invite via Email or Username", - "inviteEmailUsernameInfo": "Invite users via a valid email or username. If an email isn't registered yet, we'll invite them to join.", - "emailOrUsernameInvite": "Email address or username", + "inviteEmailUsername": "Via E-Mail oder Benutzernamen einladen", + "inviteEmailUsernameInfo": "Einladung von Benutzern über eine gültige E-Mailadresse oder Benutzernamen. Wenn eine E-Mail noch nicht registriert ist, werden wir sie einladen, beizutreten.", + "emailOrUsernameInvite": "E-Mailadresse oder Benutzername.", "messageGuildLeader": "Gildenleiter Benachrichtigen", "donateGems": "Edelsteine Spenden", "updateGuild": "Gilde Aktualisieren", @@ -379,13 +379,13 @@ "guildOrPartyLeader": "Leiter", "guildLeader": "Gildenleiter", "member": "Mitglied", - "guildSize": "Guild Size", + "guildSize": "Gildengröße", "goldTier": "Gold", "silverTier": "Silber", "bronzeTier": "Bronze", "privacySettings": "Datenschutzeinstellungen", "onlyLeaderCreatesChallenges": "Nur der Leiter kann Wettbewerbe erstellen", - "onlyLeaderCreatesChallengesDetail": "With this option selected, ordinary group members cannot create Challenges for the group.", + "onlyLeaderCreatesChallengesDetail": "Wenn diese Option ausgewählt ist, können gewöhnliche Gruppenmitglieder keine Wettbewerbe für die Gruppe erstellen.", "privateGuild": "Private Gilde", "charactersRemaining": "<%= characters %> Zeichen übrig", "guildSummary": "Zusammenfassung", @@ -417,7 +417,7 @@ "wantToJoinPartyDescription": "Gib Deine User-ID einem Freund, der bereits eine Gruppe hat oder gehe zur Gilde \"Party wanted\", um potenzielle Verbündete zu finden. ", "copy": "Kopieren", "inviteToPartyOrQuest": "Gruppe zur Quest einladen", - "inviteInformation": "Clicking \"Invite\" will send an invitation to your Party members. When all members have accepted or denied, the Quest begins.", + "inviteInformation": "Indem Du auf \"Einladen\" klickst, sendest Du eine Einladung an Deine Gruppenmitglieder. Sobald alle Mitglieder diese angenommen oder abgelehnt haben, beginnt die Quest.", "questOwnerRewards": "Belohnungen für Besitzer der Quest", "updateParty": "Gruppe Aktualisieren", "upgrade": "Upgrade", @@ -445,37 +445,37 @@ "worldBossBullet3": "Du kannst weiterhin Quest-Bosse bekämpfen, Dein Schaden wird beiden zugefügt werden.", "worldBossBullet4": "Besuche regelmäßig das Gasthaus um den Fortschritt des Welt-Bosses und seine Raserei-Angriffe zu prüfen", "worldBoss": "Weltboss", - "groupPlanTitle": "Need more for your crew?", - "groupPlanDesc": "Managing a small team or organizing household chores? Our group plans grant you exclusive access to a private task board and chat area dedicated to you and your group members!", - "billedMonthly": "*billed as a monthly subscription", + "groupPlanTitle": "Brauchst Du mehr Leute für Deine Crew?", + "groupPlanDesc": "Ein kleines Team leiten oder Hausarbeiten organisieren? Unsere Gruppenpläne gewähren Dir exklusiven Zugang zu einem privaten Task-Board und Chat-Bereich, der Dir und Deinen Gruppenmitgliedern gewidmet ist!", + "billedMonthly": "*verrechnet als monatliches Abonnement", "teamBasedTasksList": "Teambasierte Aufgabenliste", - "teamBasedTasksListDesc": "Set up an easily-viewed shared task list for the group. Assign tasks to your fellow group members, or let them claim their own tasks to make it clear what everyone is working on!", - "groupManagementControls": "Group Management Controls", - "groupManagementControlsDesc": "Use task approvals to verify that a task that was really completed, add Group Managers to share responsibilities, and enjoy a private group chat for all team members.", - "inGameBenefits": "In-Game Benefits", - "inGameBenefitsDesc": "Group members get an exclusive Jackalope Mount, as well as full subscription benefits, including special monthly equipment sets and the ability to buy gems with gold.", - "inspireYourParty": "Inspire your party, gamify life together.", + "teamBasedTasksListDesc": "Richte eine übersichtliche, gemeinsame Aufgabenliste für die Gruppe ein. Weise Deinen Gruppenmitgliedern Aufgaben zu oder lasse sie ihre eigenen Aufgaben beanspruchen, um deutlich zu machen, woran alle arbeiten!", + "groupManagementControls": "Gruppen-Management-Steuerungen", + "groupManagementControlsDesc": "Verwende Aufgabengenehmigungen, um zu überprüfen, ob eine Aufgabe wirklich abgeschlossen wurde, füge Gruppenmanager hinzu, um Verantwortlichkeiten zu teilen, und genieße einen privaten Gruppenchat für alle Teammitglieder.", + "inGameBenefits": "Vorteile im Spiel", + "inGameBenefitsDesc": "Gruppenmitglieder erhalten ein exklusives Wolpertinger-Reittier sowie volle Abonnementvorteile, einschließlich spezieller monatlicher Ausrüstungssets und der Möglichkeit, Edelsteine mit Gold zu kaufen.", + "inspireYourParty": "Inspiriere Deine Party, macht Euer Leben gemeinsam zum Spiel.", "letsMakeAccount": "Lass uns dir als erstes einen Account erstellen", "nameYourGroup": "Wähle als nächstes einen Namen für deine Gruppe", "exampleGroupName": "Beispiel: Avangers Academy", - "exampleGroupDesc": "For those selected to join the training academy for The Avengers Superhero Initiative", - "thisGroupInviteOnly": "This group is invitation only.", - "gettingStarted": "Getting Started", + "exampleGroupDesc": "Für alle Auserwählten der Trainingsakademie für \"The Avengers Superhero\"-Initiative", + "thisGroupInviteOnly": "Diese Gruppe ist nur auf Einladung verfügbar.", + "gettingStarted": "Zu Beginn", "congratsOnGroupPlan": "Herzlichen Glückwunsch, Du hast eine neue Gruppe gegründet! Hier findest Du einige Antworten auf häufig gestellte Fragen.", - "whatsIncludedGroup": "What's included in the subscription", - "whatsIncludedGroupDesc": "All members of the Group receive full subscription benefits, including the monthly subscriber items, the ability to buy Gems with Gold, and the Royal Purple Jackalope mount, which is exclusive to users with a Group Plan membership.", - "howDoesBillingWork": "How does billing work?", - "howDoesBillingWorkDesc": "Group Leaders are billed based on group member count on a monthly basis. This charge includes the $9 (USD) price for the Group Leader subscription, plus $3 USD for each additional group member. For example: A group of four users will cost $18 USD/month, as the group consists of 1 Group Leader + 3 group members.", + "whatsIncludedGroup": "Was beinhaltet das Abonnement", + "whatsIncludedGroupDesc": "Alle Mitglieder der Gruppe erhalten volle Abonnementvorteile, einschließlich der monatlichen Abonnentengegenstände, der Möglichkeit Edelsteine mit Gold zu kaufen, und das Königliche purpurfarbene Wolpertinger-Reittier, das exklusiv für Benutzer mit einer Mitgliedschaft im Gruppenplan verfügbar ist.", + "howDoesBillingWork": "Wie funktioniert die Verrechnung?", + "howDoesBillingWorkDesc": "Gruppenleiter erhalten monatlich auf der Grundlage der Gruppenmitgliederzahl eine Gebühr in Rechnung gestellt. Diese Gebühr beinhaltet den Preis von $9 (USD) für das Abonnement des Gruppenleiters, plus $3 USD für jedes weitere Gruppenmitglied. Zum Beispiel: Eine Gruppe von vier Benutzern kostet $18 USD/Monat, da die Gruppe aus 1 Gruppenleiter + 3 Gruppenmitgliedern besteht.", "howToAssignTask": "Wie weise ich eine Aufgabe zu? ", - "howToAssignTaskDesc": "Assign any Task to one or more Group members (including the Group Leader or Managers themselves) by entering their usernames in the \"Assign To\" field within the Create Task modal. You can also decide to assign a Task after creating it, by editing the Task and adding the user in the \"Assign To\" field!", - "howToRequireApproval": "How do you mark a Task as requiring approval?", - "howToRequireApprovalDesc": "Toggle the \"Requires Approval\" setting to mark a specific task as requiring Group Leader or Manager confirmation. The user who checked off the task won't get their rewards for completing it until it has been approved.", - "howToRequireApprovalDesc2": "Group Leaders and Managers can approve completed Tasks directly from the Task Board or from the Notifications panel.", - "whatIsGroupManager": "Was ist ein Gruppen Manager? ", - "whatIsGroupManagerDesc": "A Group Manager is a user role that do not have access to the group's billing details, but can create, assign, and approve shared Tasks for the Group's members. Promote Group Managers from the Group’s member list.", - "goToTaskBoard": "Gehe zum Aufgabenbrett", - "sharedCompletion": "Shared Completion", - "recurringCompletion": "None - Group task does not complete", - "singleCompletion": "Single - Completes when any assigned user finishes", - "allAssignedCompletion": "All - Completes when all assigned users finish" + "howToAssignTaskDesc": "Weise eine Aufgabe einem oder mehreren Gruppenmitgliedern (einschließlich des Gruppenleiters oder der Manager selbst) zu, indem Du ihre Benutzernamen in das Feld \"Zuweisen an\" im Bereich \"Aufgabe erstellen\" eingibst. Du kannst eine Aufgabe auch jemandem zuzuweisen, nachdem Du sie erstellt hast, indem du die Aufgabe bearbeitest und den Benutzer im Feld \"Zuweisen an\" hinzufügst!", + "howToRequireApproval": "Wie markiert man eine Aufgabe mit \"Zustimmung benötigt\"?", + "howToRequireApprovalDesc": "Markiere die \"Zustimmung benötigt\" Einstellung, um eine Aufgabe durch einen Gruppenleiter oder einen Manager bestätigen zu lassen. Der Benutzer, der die Aufgabe abhakt, erhält seine Belohnung für die Erledigung erst, nachdem die Zustimmung erteilt wurde.", + "howToRequireApprovalDesc2": "Gruppenleiter und Manager können erledigte Aufgaben direkt von der Aufgabenliste oder aus dem Benachrichtigungs-Panel bestätigen.", + "whatIsGroupManager": "Was ist ein Gruppen-Manager? ", + "whatIsGroupManagerDesc": "Gruppen-Manager haben keinen Zugriff auf die Rechnungs-Details einer Gruppe, aber sie können verteilte Aufgaben für Gruppenmitglieder erstellen, zuweisen und bestätigen. Die Beförderung zum Manager erfolgt in der Mitgliederliste. ", + "goToTaskBoard": "Gehe zur Aufgabenliste", + "sharedCompletion": "Gemeinsame Fertigstellung", + "recurringCompletion": "Keine - Gruppenaufgabe kann nicht fertiggestellt werden", + "singleCompletion": "Einzeln - Ist erledigt sobald ein zugeteilter Benutzer abschliesst", + "allAssignedCompletion": "Alle - Ist erledigt sobald alle zugeteilten Benutzer abschliessen" } \ No newline at end of file diff --git a/website/common/locales/de/questscontent.json b/website/common/locales/de/questscontent.json index 8d0579187d..a5cace03b5 100644 --- a/website/common/locales/de/questscontent.json +++ b/website/common/locales/de/questscontent.json @@ -85,7 +85,7 @@ "questMoonstone2Text": "Recidivate, Teil 2: Die Totenbeschwörerin Recidivate", "questMoonstone2Notes": "Der tapfere Waffenschmied @InspectorCaracal hilft Dir, aus den verzauberten Mondsteinen eine Kette zu formen. Du bist endlich bereit, Recidivate entgegenzutreten, aber kaum, dass Du die Sümpfe der Stagnation betrittst, läuft Dir ein fürchterlicher Schauer über den Rücken.

Verrottetes Fleisch flüstert in Dein Ohr. \"Wieder zurückgekehrt? Wie entzückend ... \" Du drehst Dich und schlägst zu, und im Licht der Mondsteinkette trifft Deine Waffe auf festes Fleisch. \"Du magst mich einmal mehr an diese Welt gebunden haben,\" knurrt Recidivate, \"aber jetzt ist Deine Zeit gekommen, sie zu verlassen!\"", "questMoonstone2Boss": "Die Totenbeschwörerin", - "questMoonstone2Completion": "Recidivate staggers backwards under your final blow, and for a moment, your heart brightens – but then she throws back her head and lets out a horrible laugh. What’s happening?", + "questMoonstone2Completion": "Recidivate taumelt unter Deinem finalen Schlag rückwärts und für einen Moment erhellt sich Dein Herz - aber dann wirft sie ihren Kopf zurück und lacht ein schreckliches Lachen. Was passiert jetzt?", "questMoonstone2DropMoonstone3Quest": "Recidivate, Teil 3: Recidivate verwandelt (Schriftrolle)", "questMoonstone3Text": "Recidivate, Teil 3: Recidivate verwandelt", "questMoonstone3Notes": "Bösartig lachend fällt Recidivate zu Boden und Du schlägst mit der Mondsteinkette nach ihr. Zu deinem Entsetzen reißt Recidivate die Steine an sich und ihre Augen leuchten vor Triumph.

\"Törichte Kreatur des Fleisches!\", schreit sie. \"Es ist wahr, die Mondsteine werden mich wieder in eine körperliche Form zurückversetzen, aber anders, als Du dir vorgestellt hast. Wenn der volle Mond zunimmt, wächst auch meine Macht, und aus den Schatten rufe ich deinen gefürchtetsten Feind hervor!\"

Ein übler grüner Nebel steigt aus dem Sumpf auf und Recidivate's Körper windet und dreht sich und verzerrt sich in eine Form, die dich mit Schrecken erfüllt - der untote Körper von Laster, wiederauferstanden.", @@ -535,7 +535,7 @@ "questLostMasterclasser3Boss": "Leereschädelschwarm", "questLostMasterclasser3RageTitle": "Schwarmnachwuchs", "questLostMasterclasser3RageDescription": "Schwarmnachwuchs: Diese Leiste füllt sich, wenn Du Deine Tagesaufgaben nicht erfüllst. Wenn sie voll ist, heilt sich der Leereschädelschwarm um 30% seiner übrigen Lebenspunkte!", - "questLostMasterclasser3RageEffect": "`Void Skull Swarm uses SWARM RESPAWN!`\n\nEmboldened by their victories, more skulls scream down from the heavens, bolstering the swarm!", + "questLostMasterclasser3RageEffect": "'Leereschädelschwarm benutzt SCHWARMNACHWUCHS!'\n\nErmutigt durch ihre Siege, strömen weitere Schädel vom Himmel, um den Schwarm zu unterstützen!", "questLostMasterclasser3DropBodyAccessory": "Ätheramulett (Körperaccessoire)", "questLostMasterclasser3DropBasePotion": "Standard-Schlüpfelixier", "questLostMasterclasser3DropGoldenPotion": "Goldenes Schlüpfelixier", @@ -594,26 +594,26 @@ "questDysheartenerDropHippogriffMount": "Hoffnungsfroher Hippogreif (Reittier)", "dysheartenerArtCredit": "Artwork von @AnnDeLune", "hugabugText": "\"Knuddel den Käfer\" Quest-Paket", - "hugabugNotes": "Contains 'The CRITICAL BUG,' 'The Snail of Drudgery Sludge,' and 'Bye, Bye, Butterfry.' Available until March 31.", + "hugabugNotes": "Beinhaltet 'Der KRITISCHE BUG', 'Die Schnecke der Schlamm-Schinderei' und 'Flieg' weiter, Funkenfalter!'. Verfügbar bis zum 31. März.", "questSquirrelText": "Das Raffinierte Eichhörnchen", - "questSquirrelNotes": "You wake up and find you’ve overslept! Why didn’t your alarm go off? … How did an acorn get stuck in the ringer?

When you try to make breakfast, the toaster is stuffed with acorns. When you go to retrieve your mount, @Shtut is there, trying unsuccessfully to unlock their stable. They look into the keyhole. “Is that an acorn in there?”

@randomdaisy cries out, “Oh no! I knew my pet squirrels had gotten out, but I didn’t know they’d made such trouble! Can you help me round them up before they make any more of a mess?”

Following the trail of mischievously placed oak nuts, you track and catch the wayward sciurines, with @Cantras helping secure each one safely at home. But just when you think your task is almost complete, an acorn bounces off your helm! You look up to see a mighty beast of a squirrel, crouched in defense of a prodigious pile of seeds.

“Oh dear,” says @randomdaisy, softly. “She’s always been something of a resource guarder. We’ll have to proceed very carefully!” You circle up with your party, ready for trouble!", - "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", + "questSquirrelNotes": "Du wachst auf und bemerkst, dass Du verschlafen hast! Warum ist Dein Wecker nicht losgegangen? .... Wie ist eine Eichel in die Klingel geraten?

Als Du versuchst, Frühstück zu machen, ist der Toaster mit Eicheln gefüllt. Als Dein Reittier holen willst, ist @Shtut da und versucht erfolglos, den Stall aufzusperren. Du schaust in das Schlüsselloch. “Ist das eine Eichel da drin?”

@randomdaisy ruft: “Oh nein! Ich wusste, dass meine Haustier-Eichhörnchen ausgebüxt sind, aber ich wusste nicht, dass sie solche Schwierigkeiten gemacht haben! Kannst Du mir helfen, sie zusammenzutreiben, bevor sie noch mehr Chaos anrichten?”

Den Spuren der schelmisch platzierten Eichennüsse folgenf fängst Du die eigensinnigen Nager, wobei @Cantras hilft, sie sicher zu Hause zu sichern. Aber gerade als Du denkst, dass Deine Aufgabe fast erledigt ist, springt eine Eichel von Deinem Helm ab! Du schaust auf, um ein mächtiges Exemplar eines Eichhörnchens zu sehen, das zur Verteidigung eines wunderbaren Haufens von Eicheln zusammengekauert dasitzt.

\"Oh je”, sagt @randomdaisy leise. “Sie war schon immer eine Art Ressourcenschützerin. Wir müssen sehr vorsichtig vorgehen!” Du schliesst mit deiner Gruppe einen Kreis, bereit für Ärger!", + "questSquirrelCompletion": "Mit einer sanften Herangehensweise, Tauschangeboten und ein paar beruhigenden Zaubersprüchen kannst Du das Eichhörnchen von seinem Schatz weglocken und zurück zu den Ställen bringen, die @Shtut gerade erst enteichelt hat. Du hast ein paar der Eicheln auf einem Arbeitstisch beiseite gelegt. “Das sind Eichhörncheneier! Vielleicht kannst Du welche aufziehen, die nicht so viel mit ihrem Essen spielen.”", "questSquirrelBoss": "Raffiniertes Eichhörnchen", "questSquirrelDropSquirrelEgg": "Eichörnchen (Ei)", "questSquirrelUnlockText": "Ermöglicht den Kauf von Eichörncheneiern auf dem Marktplatz ", "cuddleBuddiesText": "\"Kuschelkumpel\" Quest-Paket", "cuddleBuddiesNotes": "Beinhaltet 'Das Killerkaninchen', 'Das Ruchlose Frettchen' und 'Die Meerschweinchen Gang'. Verfügbar bis zum 31. Mai.", - "aquaticAmigosText": "Aquatic Amigos Quest Bundle", - "aquaticAmigosNotes": "Contains 'The Magical Axolotl', 'The Kraken of Inkomplete', and 'The Call of Octothulu'. Available until June 30.", - "questSeaSerpentText": "Danger in the Depths: Sea Serpent Strike!", - "questSeaSerpentNotes": "Your streaks have you feeling lucky—it’s the perfect time for a trip to the seahorse racetrack. You board the submarine at Diligent Docks and settle in for the trip to Dilatory, but you’ve barely submerged when an impact rocks the sub, sending its occupants tumbling. “What’s going on?” @AriesFaries shouts.

You glance through a nearby porthole and are shocked by the wall of shimmering scales passing by it. “Sea serpent!” Captain @Witticaster calls through the intercom. “Brace yourselves, it’s coming ‘round again!” As you grip the arms of your seat, your unfinished tasks flash before your eyes. ‘Maybe if we work together and complete them,’ you think, ‘we can drive this monster away!’", - "questSeaSerpentCompletion": "Battered by your commitment, the sea serpent flees, disappearing into the depths. When you arrive in Dilatory, you breathe a sigh of relief before noticing @*~Seraphina~ approaching with three translucent eggs cradled in her arms. “Here, you should have these,” she says. “You know how to handle a sea serpent!” As you accept the eggs, you vow anew to remain steadfast in completing your tasks to ensure that there’s not a repeat occurrence.", + "aquaticAmigosText": "\"Feuchte Freunde\" Quest-Paket", + "aquaticAmigosNotes": "Beinhaltet 'Der magische Axolotl', 'Der Kraken von Unfertik' und 'Der Ruf des Octothulu'. Verfügbar bis zum 30. Juni.", + "questSeaSerpentText": "Gefahr in der Tiefe: Seeschlangen-Angriff!", + "questSeaSerpentNotes": "Du fühlst Deine Glückssträhne - es ist die perfekte Zeit für einen Ausflug zur Seepferdchen-Rennstrecke. Du steigst in das U-Boot bei Diligent Docks ein und machst Dich bereit für die Reise nach Dilatory, aber kaum bist Du untergetaucht, erschüttert ein Aufprall das U-Boot und lässt seine Insassen stolpern. “Was ist los?” schreit @AriesFaries.

Du schaust durch ein nahegelegenes Bullauge und bist schockiert von der Wand aus schimmernden Schuppen, die an ihm vorbeizieht. “Seeschlange!” ruft Captain @Witticaster über die Gegensprechanlage aus. “Haltet euch fest, sie kommt schon wieder!” Während Du Dich an die Armlehnen Deines Sitzes klammerst, ziehen Deine unerledigten Aufgaben vor Deinen Augen vorüber. “Vielleicht, wenn wir zusammen arbeiten und sie erledigen”, denkst Du, “können wir dieses Monster vertreiben!”", + "questSeaSerpentCompletion": "Von Deiner Hingabe angeschlagen, flieht die Seeschlange und verschwindet in den Tiefen. Als Du in Dilatory ankommst, entfährt Dir ein Seufzer der Erleichterung, bevor Du bemerkst, dass @*~Seraphina~ sich mit drei durchsichtigen Eiern in ihren Armen nähert. “Hier, die hier sollst Du haben”, sagt sie. “Du weißt, wie man mit einer Seeschlange umgeht!” Als Du die Eier annimmst, gelobst Du von neuem, standhaft bei der Erfüllung Deiner Aufgaben zu bleiben, um sicherzustellen, dass es nicht zu einer Wiederholung kommt.", "questSeaSerpentBoss": "Die Mächtige Seeschlange", "questSeaSerpentDropSeaSerpentEgg": "Seeschlange (Ei)", "questSeaSerpentUnlockText": "Ermöglicht den Kauf von Seeschlangeneiern auf dem Marktplatz", "questKangarooText": "Känguru-Katastrophe", - "questKangarooNotes": "Maybe you should have finished that last task… you know, the one you keep avoiding, even though it always comes back around? But @Mewrose and @LilithofAlfheim invited you and @stefalupagus to see a rare kangaroo troop hopping through the Sloensteadi Savannah; how could you say no?! As the troop comes into view, something hits you on the back of the head with a mighty whack!

Shaking the stars from your vision, you pick up the responsible object--a dark red boomerang, with the very task you continually push back etched into its surface. A quick glance around confirms the rest of your party met a similar fate. One larger kangaroo looks at you with a smug grin, like she’s daring you to face her and that dreaded task once and for all!", - "questKangarooCompletion": "“NOW!” You signal your party to throw the boomerangs back at the kangaroo. The beast hops further away with each hit until she flees, leaving nothing more than a dark red cloud of dust, a few eggs, and some gold coins.

@Mewrose walks forward to where the kangaroo once stood. “Hey, where did the boomerangs go?”

“They probably dissolved into dust, making that dark red cloud, when we finished our respective tasks,” @stefalupagus speculates.

@LilithofAlfheim squints at the horizon. “Is that another kangaroo troop heading our way?”

You all break into a run back to Habit City. Better to face your difficult tasks than take another lump to the back of the head!", + "questKangarooNotes": "Vielleicht hättest Du diese letzte Aufgabe erledigen sollen.... Du weißt schon, diejenige, die Du immer meidest, auch wenn sie immer wieder auftritt? Aber @Mewrose und @LilithofAlfheim haben Dich und @stefalupagus eingeladen, um eine seltene Kängurutruppe durch die Sloensteadi Savanne hüpfen zu sehen; wie kannst Du nein sagen?! Als die Truppe in Sichtweite kommt, trifft Dich etwas mit einem mächtigen Schlag auf den Hinterkopf!

Du siehst Sterne und schüttelst den Kopf. Dann nimmst Du das verantwortliche Objekt auf - einen dunkelroten Bumerang, mit genau der Aufgabe eingraviert, die Du immer wieder verdrängst. Ein kurzer Blick in die Runde bestätigt, dass den Rest Deiner Gruppe ein ähnliches Schicksal ereilt hat. Ein größeres Känguru sieht Dich mit einem selbstgefälligen Grinsen an, als würde es Dich auffordern, Dich ihm und dieser gefürchteten Aufgabe ein für allemal zu stellen!", + "questKangarooCompletion": "“JETZT!” signalisierst Du Deiner Gruppe, die Bumerangs zurück auf das Känguru zu werfen. Das Tier hüpft bei jedem Treffer weiter weg, bis es flieht, und hinterlässt nichts anderes als eine dunkelrote Staubwolke, ein paar Eier und einige Goldmünzen.

@Mewrose geht zu der Stelle, wo vorher das Känguru stand. “Hey, wo sind die Bumerangs hin?”

“Sie haben sich wahrscheinlich in Staub aufgelöst und diese dunkelrote Wolke gebildet, als wir unsere jeweiligen Aufgaben erledigt hatten”, spekuliert @stefalupagus.

@LilithofAlfheim kneift die Augen zu und schaut zum Horizont. “Ist das eine weitere Kängurutruppe, die uns entgegenkommt?”

Ihr brecht alle im Laufschritt auf, zurück nach Habit City. Besser, sich Deinen schwierigen Aufgaben zu stellen, als einen weiteren Schlag auf den Hinterkopf zu bekommen!", "questKangarooBoss": "Katastrophales Känguru", "questKangarooDropKangarooEgg": "Känguru (Ei)", "questKangarooUnlockText": "Ermöglicht den Kauf von Känguru-Eiern auf dem Marktplatz", diff --git a/website/common/locales/es/settings.json b/website/common/locales/es/settings.json index 895a59624c..7f856014b5 100644 --- a/website/common/locales/es/settings.json +++ b/website/common/locales/es/settings.json @@ -157,7 +157,7 @@ "generate": "Generar", "getCodes": "Obtener Códigos", "webhooks": "Webhooks", - "webhooksInfo": "Habitica provides webhooks so that when certain actions occur in your account, information can be sent to a script on another website. You can specify those scripts here. Be careful with this feature because specifying an incorrect URL can cause errors or slowness in Habitica. For more information, see the wiki's
Webhooks page.", + "webhooksInfo": "Habitica provee webhooks para que cuando sucedan cierta acciones en tu cuenta se envíe información a un script en otra web. Puedes especificar esos scripts aquí. Sé cuidadoso con esta característica porque especificar una URL incorrecta puede causar errores en Habitica o hacer que funcione más lenta. Para más información, consulta la página Webhooks en la wiki.", "enabled": "Habilitado", "webhookURL": "URL del Webhook", "invalidUrl": "Url no válida", @@ -193,7 +193,7 @@ "push": "Push", "about": "Sobre Habitica", "setUsernameNotificationTitle": "¡Confirma tu nombre de usuario!", - "setUsernameNotificationBody": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "setUsernameNotificationBody": "Pronto estaremos haciendo el cambio de nombres de inicio de sesión a nombres de usuario públicos únicos. Este nombre de usuario se usará para invitaciones, @menciones en los chats, y mensajes.", "usernameIssueSlur": "Los nombres de usuario no pueden incluir lenguaje inapropiado.", "usernameIssueForbidden": "Los nombres de usuario no pueden incluir palabras restringidas.", "usernameIssueLength": "Los nombre de usuario deben tener una longitud de entre 1 y 20 caracteres.", @@ -204,6 +204,6 @@ "goToSettings": "Ir a Ajustes", "usernameVerifiedConfirmation": "¡Tu nombre de usuario, <%= username %>, está confirmado!", "usernameNotVerified": "Por favor, confirma tu nombre de usuario.", - "changeUsernameDisclaimer": "We will be transitioning login names to unique, public usernames soon. This username will be used for invitations, @mentions in chat, and messaging.", + "changeUsernameDisclaimer": "Pronto estaremos haciendo el cambio de nombres de inicio de sesión a nombres de usuario públicos únicos. Este nombre de usuario se usará para invitaciones, @menciones en los chats, y mensajes.", "verifyUsernameVeteranPet": "¡Una de estas Mascotas Veteranas te estará esperando cuando hayas terminado de confirmar!" } \ No newline at end of file diff --git a/website/common/locales/es/subscriber.json b/website/common/locales/es/subscriber.json index 881363e5d6..c44b1c0bad 100644 --- a/website/common/locales/es/subscriber.json +++ b/website/common/locales/es/subscriber.json @@ -148,7 +148,7 @@ "mysterySet201807": "Conjunto de Serpiente Marina", "mysterySet201808": "Conjunto de Dragón de Lava", "mysterySet201809": "Conjunto de Armadura Otoñal", - "mysterySet201810": "Dark Forest Set", + "mysterySet201810": "Conjunto del Bosque Oscuro", "mysterySet301404": "El Conjunto Steampunk", "mysterySet301405": "Accesorios Steampunk", "mysterySet301703": "Conjunto de Pavo real Steampunk", @@ -207,7 +207,7 @@ "haveCouponCode": "¿Tienes un código de cupón?", "subscriptionAlreadySubscribedLeadIn": "¡Gracias por suscribirte!", "subscriptionAlreadySubscribed1": "Para ver tus detalles de suscripción y cancelar, renovar o cambiar tu suscripción, por favor ve a Icono de usuario > Ajustes > Suscripción.", - "purchaseAll": "Purchase Set", + "purchaseAll": "Comprar Conjunto", "gemsPurchaseNote": "¡Los suscriptores pueden comprar gemas a cambio de oro! Para un acceso más fácil, también puedes fijar las gemas a tu columna de Recompensas.", "gemsRemaining": "Gemas que quedan", "notEnoughGemsToBuy": "No puedes comprar esa cantidad de gemas" diff --git a/website/common/locales/it/communityguidelines.json b/website/common/locales/it/communityguidelines.json index d7e62edb58..b2126e1cec 100644 --- a/website/common/locales/it/communityguidelines.json +++ b/website/common/locales/it/communityguidelines.json @@ -30,7 +30,7 @@ "commGuidePara022": "La Taverna è il punto di incontro principale degli abitanti di Habitica. Daniel il locandiere mantiene il posto sfavillante, e Lemoness sarà felice di far comparire una limonata mentre ti siedi a discutere. Tieni solo in mente...", "commGuidePara023": "Conversation tends to revolve around casual chatting and productivity or life improvement tips. Because the Tavern chat can only hold 200 messages, it isn't a good place for prolonged conversations on topics, especially sensitive ones (ex. politics, religion, depression, whether or not goblin-hunting should be banned, etc.). These conversations should be taken to an applicable Guild. A Mod may direct you to a suitable Guild, but it is ultimately your responsibility to find and post in the appropriate place.", "commGuidePara024": "Non parlare di qualsiasi fonte di dipendenza nella Taverna. Molte persone usano Habitica per cercare di sconfiggere le loro cattive abitudini. Sentire gente parlare di sostanze illegali/che creano dipendenza può rendere la cosa molto più difficile per loro ! Rispetta i tuoi compagni di Taverna e prendi questo in considerazione. Ciò include, ma non si limita a : fumo, alcol, pornografia, gioco d'azzardo, e uso di droga.", - "commGuidePara027": "When a moderator directs you to take a conversation elsewhere, if there is no relevant Guild, they may suggest you use the Back Corner. The Back Corner Guild is a free public space to discuss potentially sensitive subjects that should only be used when directed there by a moderator. It is carefully monitored by the moderation team. It is not a place for general discussions or conversations, and you will be directed there by a mod only when it is appropriate.", + "commGuidePara027": "Quando un moderatore di indica di portare una conversazione altrove, se non c'è una Gilda adeguata, possono suggerirti di usare la gilda \"Back Corner\". La Gilda \"Back Corner\" è uno spazio pubblico gratuito per discutere materie potenzialmente sensibili che dovrebbero essere trattate solo quando si è diretti da un moderatore. È attentamente monitorata dal team di moderazione. Non è un posto per discussioni generali o conversazioni e sarai reindirizzato da un moderatore solo nei casi appropriati.", "commGuideHeadingPublicGuilds": "Gilde pubbliche", "commGuidePara029": "Public Guilds are much like the Tavern, except that instead of being centered around general conversation, they have a focused theme. Public Guild chat should focus on this theme. For example, members of the Wordsmiths Guild might be cross if the conversation is suddenly focusing on gardening instead of writing, and a Dragon-Fanciers Guild might not have any interest in deciphering ancient runes. Some Guilds are more lax about this than others, but in general, try to stay on topic!", "commGuidePara031": "Certe Gilde pubbliche conterranno argomenti delicati, come la depressione, la religione, la politica, ecc. Nessun problema finché le conversazioni non violano i Termini e le Condizioni d'uso o le Regole degli Spazi Pubblici, e finché rimangono in argomento.", diff --git a/website/common/locales/it/content.json b/website/common/locales/it/content.json index 61467ed263..44a3ec695c 100644 --- a/website/common/locales/it/content.json +++ b/website/common/locales/it/content.json @@ -170,8 +170,8 @@ "questEggSquirrelText": "Scoiattolo", "questEggSquirrelMountText": "Scoiattolo", "questEggSquirrelAdjective": "una folta coda", - "questEggSeaSerpentText": "Serpente di Mare", - "questEggSeaSerpentMountText": "Serpente di Mare", + "questEggSeaSerpentText": "Serpente Marino", + "questEggSeaSerpentMountText": "Serpente Marino", "questEggSeaSerpentAdjective": "un scintillante ", "questEggKangarooText": " Canguro", "questEggKangarooMountText": "Canguro", diff --git a/website/common/locales/it/front.json b/website/common/locales/it/front.json index 5d92ea2ebe..d079d6da0e 100644 --- a/website/common/locales/it/front.json +++ b/website/common/locales/it/front.json @@ -143,9 +143,9 @@ "pkQuestion1": "Cosa ha ispirato Habitica? Come è nato?", "pkAnswer1": "Se hai mai investito del tempo per livellare un personaggio in un gioco, è difficile non chiedersi come sarebbe grandiosa la tua vita se tutto quello sforzo fosse dedicato a migliorare se stessi nella vita reale anzichè al proprio avatar. Abbiamo iniziato a costruire Habitica per rispondere a questa domanda.
Habitica è stata ufficialmente lanciata con un Kickstarter nel 2013 e l'idea ha decollato. Da allora, sta crescendo in un enorme progetto, supportato da i nostri fantastici volontari open-source e dai nostri generosi utenti.", "pkQuestion2": "Perchè Habitica funziona?", - "pkAnswer2": "Forming a new habit is hard because people really need that obvious, instant reward. For example, it’s tough to start flossing, because even though our dentist tells us that it's healthier in the long run, in the immediate moment it just makes your gums hurt.
Habitica's gamification adds a sense of instant gratification to everyday objectives by rewarding a tough task with experience, gold… and maybe even a random prize, like a dragon egg! This helps keep people motivated even when the task itself doesn't have an intrinsic reward, and we've seen people turn their lives around as a result. You can check out success stories here: https://habitversary.tumblr.com", + "pkAnswer2": "Formare una nuova abitudine è difficile, perché una persona ha bisogno di una ricompensa ovvia ed istantanea. Ad esempio, è dura cominciare a usare il filo dentale, perché anche se il dentista ti dice che è benefico sul lungo termine, sul momento immediato ti fa soltanto male alle gengive.
La ludicizzazione di Habitica aggiunge un senso di gratificazione istantanea agli obbiettivi quotidiani, ricompensando una attività difficile con esperienza, oro... e magari anche una ricompensa a sorpresa, come un uovo di drago! Questa meccanica aiuta la gente a restare motivata anche quando l'attività in se non possiede nessuna forma di ricompensa intrinseca, e abbiamo visto gente a cui è cambiata la vita grazie a questo! Puoi scoprire le storie di successo qui: https://habitversary.tumblr.com", "pkQuestion3": "Perchè avete aggiunto delle funzioni social?", - "pkAnswer3": "Social pressure is a huge motivating factor for a lot of people, so we knew that we wanted to have a strong community that would hold each other accountable for their goals and cheer for their successes. Luckily, one of the things that multiplayer video games do best is foster a sense of community among their users! Habitica’s community structure borrows from these types of games; you can form a small Party of close friends, but you can also join a larger, shared-interest groups known as a Guild. Although some users choose to play solo, most decide to form a support network that encourages social accountability through features such as Quests, where Party members pool their productivity to battle monsters together.", + "pkAnswer3": "La pressione sociale è un fattore di motivazione enorme per molta gente, quindi sapevamo già dall'inizio che volevamo una comunità unita di cui gli individui si terrebbero responsabili a vicenda. Fortunatamente, una delle cose che i giochi video multigiocatori fanno meglio è creare un senso di comunita tra i loro giocatori! La struttura comunitaria di Habitica si ispira a questo tipo di gioco: hai la possibilità di formare una piccola squadra di amici, ma puoi anche raggiungere un gruppo più grande orientato verso un interesse comune, chiamato Gilda. Mentre certi utenti preferiscono giocare da soli, la maggior parte decide di formare una rete di supporto che incoraggia la responsabilità sociale attraverso funzionalità come le Missioni, per le quali i membri della squadra uniscono la loro produttività per combattere mostri insieme.", "pkQuestion4": "Why does skipping tasks remove your avatar’s health?", "pkAnswer4": "If you skip one of your daily goals, your avatar will lose health the following day. This serves as an important motivating factor to encourage people to follow through with their goals because people really hate hurting their little avatar! Plus, the social accountability is critical for a lot of people: if you’re fighting a monster with your friends, skipping your tasks hurts their avatars, too.", "pkQuestion5": "Cos'ha di diverso Habitica rispetto ad altri programmi di \"gamification\"?", @@ -156,7 +156,7 @@ "pkAnswer7": "Habitica uses pixel art for several reasons. In addition to the fun nostalgia factor, pixel art is very approachable to our volunteer artists who want to chip in. It's much easier to keep our pixel art consistent even when lots of different artists contribute, and it lets us quickly generate a ton of new content!", "pkQuestion8": "Come ha influito Habitica sulla vita reale delle persone?", "pkAnswer8": "You can find lots of testimonials for how Habitica has helped people here: https://habitversary.tumblr.com", - "pkMoreQuestions": "Do you have a question that’s not on this list? Send an email to admin@habitica.com!", + "pkMoreQuestions": "Hai una domanda che non è in questa lista? Mandaci un email a admin@habitica.com!", "pkVideo": "Video", "pkPromo": "Promozioni", "pkLogo": "Loghi", @@ -313,7 +313,7 @@ "trackYourGoals": "Tieni Traccia delle tue Abituni e Obiettivi", "trackYourGoalsDesc": "Stay accountable by tracking and managing your Habits, Daily goals, and To-Do list with Habitica’s easy-to-use mobile apps and web interface.", "earnRewards": "Ottieni ricompense per i tuoi traguardi", - "earnRewardsDesc": "Check off tasks to level up your Avatar and unlock in-game features such as battle armor, mysterious pets, magic skills, and even quests!", + "earnRewardsDesc": "Completa attività per far salire il tuo avatar di livello e sblocca così armature, misteriosi animali, incantesimi di magia, e perfino missioni!", "battleMonsters": "Combatti Mostri coi tuoi Amici", "battleMonstersDesc": "Combatti mostri insieme ad altri abitanti di Habitica! Usa l'Oro che guadagni per comperare oggetti nel gioco o ricompense personalizzate, come guardare un episodio della tua serie TV preferita.", "playersUseToImprove": "I giocatori usano Habitica per Migliorare", diff --git a/website/common/locales/it/gear.json b/website/common/locales/it/gear.json index 62219cab86..700ad8a086 100644 --- a/website/common/locales/it/gear.json +++ b/website/common/locales/it/gear.json @@ -440,8 +440,8 @@ "armorSpecialSamuraiArmorNotes": "Questa resistente armatura a scaglie è tenuta insieme da eleganti fili di seta. Aumenta la Percezione di <%= per %>.", "armorSpecialTurkeyArmorBaseText": "Armatura Tacchino", "armorSpecialTurkeyArmorBaseNotes": "Mantieni le tue bacchette calde e confortevoli in questa armatura pennuta! Non conferisce alcun bonus.", - "armorSpecialTurkeyArmorGildedText": "Gilded Turkey Armor", - "armorSpecialTurkeyArmorGildedNotes": "Strut your stuff in this seasonally shiny armor! Confers no benefit.", + "armorSpecialTurkeyArmorGildedText": "Armatura Tacchino Dorato", + "armorSpecialTurkeyArmorGildedNotes": "Pavoneggiati con questa armatura brillante stagionale! Non conferisce alcun bonus.", "armorSpecialYetiText": "Veste dell'Addestra-Yeti", "armorSpecialYetiNotes": "Folta e feroce. Aumenta la Costituzione di <%= con %>. Edizione limitata, inverno 2013-2014.", "armorSpecialSkiText": "Parka del Nevassassino", @@ -596,8 +596,8 @@ "armorSpecialSpring2018WarriorNotes": "This colorful plate is forged with the sunrise's fire. Increases Constitution by <%= con %>. Limited Edition 2018 Spring Gear.", "armorSpecialSpring2018MageText": "Tunica Tulipana", "armorSpecialSpring2018MageNotes": "I tuoi incantesimi possono soltanto perfezionarsi se indossi questi soffici petali. Aumenta la Percezione di <%= int %>. Attrezzatura Primaverile in Edizione Limitata 2018.", - "armorSpecialSpring2018HealerText": "Garnet Armor", - "armorSpecialSpring2018HealerNotes": "Let this bright armor infuse your heart with power for healing. Increases Constitution by <%= con %>. Limited Edition 2018 Spring Gear.", + "armorSpecialSpring2018HealerText": "Armatura Granato", + "armorSpecialSpring2018HealerNotes": "Lascia che questa armatura infonda il tuo cuore col potere di guarire. Aumenta la Costituzione di <%= con %>. Edizione limitata, primavera 2018.", "armorSpecialSummer2018RogueText": "Veste da Pescatore Tascabile", "armorSpecialSummer2018RogueNotes": "Galleggianti? Scatole di ami? Lenza di ricambio? Grimaldelli? Fumogeni? Qualsiasi cosa di cui hai bisogno per la tua scampagnata a pesca è a portata di mano. C'è una tasca per ogni cosa! Aumenta la Percezione di <%= per %>. Edizione limitata, estate 2018.", "armorSpecialSummer2018WarriorText": "Armatura Coda di Betta", @@ -1112,8 +1112,8 @@ "headMystery201805Notes": "This helm will make you the proudest and prettiest (possibly also the loudest) bird in town. Confers no benefit. May 2018 Subscriber Item.", "headMystery201806Text": "Alluring Anglerfish Helm", "headMystery201806Notes": "The mesmerizing light atop this helm will call all the creatures of the sea to your side. We urge you to use your glowy powers of attraction for good! Confers no benefit. June 2018 Subscriber Item.", - "headMystery201807Text": "Sea Serpent Helm", - "headMystery201807Notes": "The strong scales on this helm will protect you from any manner of oceanic foe. Confers no benefit. July 2018 Subscriber Item.", + "headMystery201807Text": "Elmo Serpente Marino", + "headMystery201807Notes": "Le forti scaglie su questo elmo ti proteggeranno da qualsiasi tipo di nemico oceanico. Non conferisce alcun bonus. Oggetto per abbonati, luglio 2018.", "headMystery201808Text": "Lava Dragon Cowl", "headMystery201808Notes": "The glowing horns on this cowl will light your way through underground caverns. Confers no benefit. August 2018 Subscriber Item.", "headMystery201809Text": "Crown of Autumn Flowers", diff --git a/website/common/locales/it/limited.json b/website/common/locales/it/limited.json index 7a82f8be47..51b050af93 100644 --- a/website/common/locales/it/limited.json +++ b/website/common/locales/it/limited.json @@ -25,7 +25,7 @@ "polarBearPup": "Cucciolo di Orso Polare", "jackolantern": "Zucca di Halloween", "ghostJackolantern": "Zucca di Halloween fantasma", - "glowJackolantern": "Glow-in-the-Dark Jack-O-Lantern", + "glowJackolantern": "Zucca Fosforescente", "seasonalShop": "Negozio Stagionale", "seasonalShopClosedTitle": "<%= linkStart %>Leslie<%= linkEnd %>", "seasonalShopTitle": "<%= linkStart %>Maga Stagionale<%= linkEnd %>", @@ -35,7 +35,7 @@ "seasonalShopWinterText": "Buon Winter Wonderland!! Vuoi comprare degli oggetti rari? Saranno disponibili solo fino al 31 gennaio!", "seasonalShopSpringText": "Buon Spring Fling!! Vuoi comprare degli oggetti rari? Saranno disponibili solo fino al 30 aprile!", "seasonalShopFallTextBroken": "Oh... Benvenuto nel Negozio Stagionale... Abbiamo in vendita oggetti dell'Edizione Stagionale autunnale, o qualcosa del genere... Tutto quello che vedi qui sarà disponibile per l'acquisto durante l'evento \"Fall Festival\" di ogni anno, ma siamo aperti sono fino al 31 ottobre... Penso che dovresti rifornirti ora altrimenti dovrai aspettare... e aspettare... e aspettare... *sigh*", - "seasonalShopBrokenText": "My pavilion!!!!!!! My decorations!!!! Oh, the Dysheartener's destroyed everything :( Please help defeat it in the Tavern so I can rebuild!", + "seasonalShopBrokenText": "Il mio padiglione!!!!!!! Le mie decorazioni!!!! Oh, il Dysheartener ha distrutto tutto :( Ti prego, aiutami a sconfiggerlo nella Taverna perché io possa ricostruire!", "seasonalShopRebirth": "Se hai comprato questo equipaggiamento in passato ma attualmente non lo possiedi, potrai riacquistarlo dalla colonna delle Ricompense. All'inizio potrai comprare solo gli oggetti per la tua classe attuale (Guerriero, se non l'hai ancora scelta/cambiata), ma niente paura, gli altri oggetti specifici per le varie classi diventeranno disponibili se ti converti a quella classe.", "candycaneSet": "Bastoncino di Zucchero (Mago)", "skiSet": "Assa-sci-no (Assassino)", @@ -127,7 +127,7 @@ "summer2018MerfolkMonarchSet": "Monarca dei Mermeidi (Guaritore)", "summer2018FisherRogueSet": "Pescatore-Assassino (Assassino)", "fall2018MinotaurWarriorSet": "Minotauro (Guerriero)", - "fall2018CandymancerMageSet": "Candymancer (Mage)", + "fall2018CandymancerMageSet": "Caramellomante (Mago)", "fall2018CarnivorousPlantSet": "Pianta Carnivora (Guaritore)", "fall2018AlterEgoSet": "Alter Ego (Assassino)", "eventAvailability": "Disponibile fino al <%= date(locale) %>.", diff --git a/website/common/locales/it/loadingscreentips.json b/website/common/locales/it/loadingscreentips.json index 1e0f89d02c..dacc04033a 100644 --- a/website/common/locales/it/loadingscreentips.json +++ b/website/common/locales/it/loadingscreentips.json @@ -15,7 +15,7 @@ "tip13": "Clicca su \"Etichette\" nella tua pagina principale per rendere un'intricata lista di attività molto più gestibile!", "tip14": "Puoi aggiungere delle intestazioni (o delle citazioni per ispirarti) alla tua lista come delle Abitudini senza (+/-).", "tip15": "Completa tutte le ‘Masterclasser Quest-lines’ per sapere sulla storia segreta di Habitica", - "tip16": "Click the link to the Data Display Tool in the footer for valuable insights on your progress.", + "tip16": "Clicca il link verso lo Strumento Visualizzazione Dati nel piè di pagina per consigli preziosi dul tuo progresso.", "tip17": "Usa le app per impostare dei promemoria per le tue attività.", "tip18": "Le abitudini solo positive o solo negative \"sbiadiscono\" gradualmente e tornano gialle.", "tip19": "Aumenta il tuo attributo Intelligenza per ottenere più esperienza quando completi un'attività.", @@ -27,7 +27,7 @@ "tip25": "I quattro Gran Galà stagionali iniziano nei pressi dei solstizi e degli equinozi.", "tip26": "Puoi cercare una squadra o trovare nuovi membri nella gilda \"Party Wanted\"!", "tip27": "Hai fatto una Daily ieri ma hai dimenticato di metterci la spunta? Non preoccuparti! Grazie a una nuova funzione potrai segnare cosa hai fatto ieri prima di cominciare la tua nuova giornata.", - "tip28": "Set a Custom Day Start under User Icon > Settings to control when your day restarts.", + "tip28": "Personalizza l'inizio della giornata in Icona Utente > Impostazioni per decidere quando la tua giornata viene resettata.", "tip29": "Completa tutte le tue Daily per ottenere un bonus Giorno Perfetto che aumenta le tue statistiche!", "tip30": "Puoi invitare persone nelle Gilde, non solo nelle Squadre.", "tip31": "Dai un'occhiata alle liste pre-compilate della gilda \"Library of Tasks and Challenges\" per delle attività di esempio.", diff --git a/website/common/locales/it/messages.json b/website/common/locales/it/messages.json index 5147a2f560..9e3ab6f84d 100644 --- a/website/common/locales/it/messages.json +++ b/website/common/locales/it/messages.json @@ -62,5 +62,5 @@ "unallocatedStatsPoints": "Hai <%= points %> Punti Statistica non allocati", "beginningOfConversation": "Stai iniziando una conversazione con <%= userName %>. Ricorda di scrivere con gentilezza e rispetto, seguendo le Linee guida della community!", "messageDeletedUser": "Siamo spiacenti, questo utente ha eliminato il suo account.", - "messageMissingDisplayName": "Missing display name." + "messageMissingDisplayName": "Nome Pubblico mancante." } \ No newline at end of file diff --git a/website/common/locales/it/npc.json b/website/common/locales/it/npc.json index a6aef3a996..4a66b04827 100644 --- a/website/common/locales/it/npc.json +++ b/website/common/locales/it/npc.json @@ -5,7 +5,7 @@ "welcomeTo": "Benvenuto in", "welcomeBack": "Bentornato!", "justin": "Justin", - "justinIntroMessage1": "Hello there! You must be new here. My name is Justin, and I'll be your guide in Habitica.", + "justinIntroMessage1": "Ciao! Devi essere nuovo qui. Mi chiamo Justin, la tua guida ad Habitica. ", "justinIntroMessage2": "Per cominciare, hai bisogno di un avatar.", "justinIntroMessage3": "Bene! Ora, su cosa vorresti lavorare durante questo viaggio?", "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", diff --git a/website/common/locales/it/pets.json b/website/common/locales/it/pets.json index 13149b4f50..2f8453360b 100644 --- a/website/common/locales/it/pets.json +++ b/website/common/locales/it/pets.json @@ -19,7 +19,7 @@ "veteranTiger": "Tigre Veterana", "veteranLion": "Leone Veterano", "veteranBear": "Orso Veterano", - "veteranFox": "Veteran Fox", + "veteranFox": "Volpe Veterana", "cerberusPup": "Cucciolo di Cerbero", "hydra": "Idra", "mantisShrimp": "Canocchia", diff --git a/website/common/locales/it/questscontent.json b/website/common/locales/it/questscontent.json index bf3b9e51ae..85a79c24f7 100644 --- a/website/common/locales/it/questscontent.json +++ b/website/common/locales/it/questscontent.json @@ -512,7 +512,7 @@ "questHippoBoss": "L'Ippo-Crita", "questHippoDropHippoEgg": "Ippopotamo (Uovo)", "questHippoUnlockText": "Sblocca le uova di Ippopotamo acquistabili nel Mercato", - "farmFriendsText": "Collezione di Sfide Amici degli Animali", + "farmFriendsText": "Pacchetto missioni Amici della Fattoria", "farmFriendsNotes": "Contains 'The Mootant Cow', 'Ride the Night-Mare', and 'The Thunder Ram'. Available until September 30.", "witchyFamiliarsText": "Witchy Familiars Quest Bundle", "witchyFamiliarsNotes": "Contains 'The Rat King', 'The Icy Arachnid', and 'Swamp of the Clutter Frog'. Available until October 31.", @@ -593,38 +593,38 @@ "questDysheartenerDropHippogriffPet": "Hopeful Hippogriff (Pet)", "questDysheartenerDropHippogriffMount": "Hopeful Hippogriff (Mount)", "dysheartenerArtCredit": "Illustrazione di @AnnDeLune", - "hugabugText": "Hug a Bug Quest Bundle", + "hugabugText": "Pacchetto missioni Abbraccia un Insetto", "hugabugNotes": "Contains 'The CRITICAL BUG,' 'The Snail of Drudgery Sludge,' and 'Bye, Bye, Butterfry.' Available until March 31.", "questSquirrelText": "Lo Scoiattolo Subdolo", "questSquirrelNotes": "Ti svegli e ti accorgi di aver dormito troppo! Perché non ha suonato l'allarme? ... Come ha fatto una ghianda a finire nella sveglia?

Quando provi a fare colazione, il tostapane è pieno di ghiande. Quando vai a recuperare la tua cavalcatura, @Shtut è lì che tenta di aprire senza successo la loro scuderia. Guardano nella serratura. \"È una ghianda quella lì dentro?\"

@randomdaisy piange \"Oh no! Sapevo che i miei scoiattoli erano usciti ma non sapevo che avrebbero causato problemi del genere! Mi puoi aiutare a radunarli prima che facciano altri pasticci?\"

Seguendo la scia di noci di quercia mal disposte, tracci e catturi i roditori capricciosi con @Cantras che ti aiuta a proteggerli fino a casa. Ma proprio quando pensi che il tuo compito sia quasi finito, una ghianda rimbalza sul tuo elmo! Guardi in alto e vedi un grosso e bestiale schoiattolo, rannicchiato in difesa di una prodigiosa pila di semi.

\"Oh cara,\" dice dolcemente @randomdaisy.\"È sempre stata una specie di guardiana delle risorse. Dobbiamo procedere con cautela!\" Ti metti in cerchio con la tua squadra, pronti per i problemi!", "questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”", "questSquirrelBoss": "Sneaky Squirrel", - "questSquirrelDropSquirrelEgg": "Squirrel (Egg)", - "questSquirrelUnlockText": "Unlocks purchasable Squirrel eggs in the Market", + "questSquirrelDropSquirrelEgg": "Scoiattolo (Uovo)", + "questSquirrelUnlockText": "Sblocca l'acquisto delle uova di Scoiattolo nel Mercato", "cuddleBuddiesText": "Cuddle Buddies Quest Bundle", "cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'. Available until May 31.", "aquaticAmigosText": "Aquatic Amigos Quest Bundle", "aquaticAmigosNotes": "Contains 'The Magical Axolotl', 'The Kraken of Inkomplete', and 'The Call of Octothulu'. Available until June 30.", - "questSeaSerpentText": "Danger in the Depths: Sea Serpent Strike!", + "questSeaSerpentText": "Pericolo nelle Profondità: Il Serpente Marino Colpisce!", "questSeaSerpentNotes": "Your streaks have you feeling lucky—it’s the perfect time for a trip to the seahorse racetrack. You board the submarine at Diligent Docks and settle in for the trip to Dilatory, but you’ve barely submerged when an impact rocks the sub, sending its occupants tumbling. “What’s going on?” @AriesFaries shouts.

You glance through a nearby porthole and are shocked by the wall of shimmering scales passing by it. “Sea serpent!” Captain @Witticaster calls through the intercom. “Brace yourselves, it’s coming ‘round again!” As you grip the arms of your seat, your unfinished tasks flash before your eyes. ‘Maybe if we work together and complete them,’ you think, ‘we can drive this monster away!’", "questSeaSerpentCompletion": "Battered by your commitment, the sea serpent flees, disappearing into the depths. When you arrive in Dilatory, you breathe a sigh of relief before noticing @*~Seraphina~ approaching with three translucent eggs cradled in her arms. “Here, you should have these,” she says. “You know how to handle a sea serpent!” As you accept the eggs, you vow anew to remain steadfast in completing your tasks to ensure that there’s not a repeat occurrence.", - "questSeaSerpentBoss": "The Mighty Sea Serpent", - "questSeaSerpentDropSeaSerpentEgg": "Sea Serpent (Egg)", - "questSeaSerpentUnlockText": "Unlocks purchasable Sea Serpent eggs in the Market", + "questSeaSerpentBoss": "Il Possente Serpente Marino", + "questSeaSerpentDropSeaSerpentEgg": "Serpente Marino (Uovo)", + "questSeaSerpentUnlockText": "Sblocca l'acquisto delle uovo del Serpente Marino nel Mercato", "questKangarooText": "Catastrofe Canguro", "questKangarooNotes": "Forse avresti dovuto finire quell'ultima attività... lo sai, quella che continui ad evitare, anche se continua a tornare. Ma @Mewrose e @LilithofAlfheim invitano te e @stefalupagus a vedere un una rara truppa canguro saltellare nella Savana Sloensteadi; come puoi dire di no?! Mentre la truppa appare alla vista, qualcosa ti colpisce dietro alla la testa con un grosso whack!

Scuotendo le stelle che ti girano in testa, prendi l'oggetto responsabile-- un boomerang rosso scuro, con la stessa attività che continuamente respingi incisa sulla sua superficie. Una rapida occhiata attorno conferma che il resto della squadra ha avuto la stessa esperienza. Un più grosso canguro ti guarda con un sorrisetto compiaciuto, come se ti stesse sfidando ad affrontarlo assieme alla temuta attività una volta per tutte!", "questKangarooCompletion": "“NOW!” You signal your party to throw the boomerangs back at the kangaroo. The beast hops further away with each hit until she flees, leaving nothing more than a dark red cloud of dust, a few eggs, and some gold coins.

@Mewrose walks forward to where the kangaroo once stood. “Hey, where did the boomerangs go?”

“They probably dissolved into dust, making that dark red cloud, when we finished our respective tasks,” @stefalupagus speculates.

@LilithofAlfheim squints at the horizon. “Is that another kangaroo troop heading our way?”

You all break into a run back to Habit City. Better to face your difficult tasks than take another lump to the back of the head!", - "questKangarooBoss": "Catastrophic Kangaroo", - "questKangarooDropKangarooEgg": "Kangaroo (Egg)", - "questKangarooUnlockText": "Unlocks purchasable Kangaroo eggs in the Market", - "forestFriendsText": "Forest Friends Quest Bundle", + "questKangarooBoss": "Canguro Catastrofico", + "questKangarooDropKangarooEgg": "Canguro (Uovo)", + "questKangarooUnlockText": "Sblocca l'acquisto delle uova di Canguro nel Mercato", + "forestFriendsText": "Pacchetto missioni Amici della Foresta", "forestFriendsNotes": "Contains 'The Spirit of Spring', 'The Hedgebeast', and 'The Tangle Tree'. Available until September 30.", "questAlligatorText": "The Insta-Gator", "questAlligatorNotes": "“Crikey!” exclaims @gully. “An Insta-Gator in its natural habitat! Careful, it distracts its prey with things that seem urgent THIS INSTANT, and it feeds on the unchecked Dailies that result.” You fall silent to avoid attracting its attention, but to no avail. The Insta-Gator spots you and charges! Distracting voices rise up from Swamps of Stagnation, grabbing for your attention: “Read this post! See this photo! Pay attention to me THIS INSTANT!” You scramble to mount a counterattack, completing your Dailies and bolstering your good Habits to fight off the dreaded Insta-Gator.", "questAlligatorCompletion": "With your attention focused on what’s important and not the Insta-Gator’s distractions, the Insta-Gator flees. Victory! “Are those eggs? They look like gator eggs to me,” asks @mfonda. “If we care for them correctly, they’ll be loyal pets or faithful steeds,” answers @UncommonCriminal, handing you three to care for. Let’s hope so, or else the Insta-Gator might make a return…", "questAlligatorBoss": "Insta-Gator", - "questAlligatorDropAlligatorEgg": "Alligator (Egg)", - "questAlligatorUnlockText": "Unlocks purchasable Alligator eggs in the Market", + "questAlligatorDropAlligatorEgg": "Alligatore (Uovo)", + "questAlligatorUnlockText": "Sblocca l'acquisto delle uova di Alligatore nel Mercato", "oddballsText": "Oddballs Quest Bundle", "oddballsNotes": "Contains 'The Jelly Regent,' 'Escape the Cave Creature,' and 'A Tangled Yarn.' Available until November 30." } \ No newline at end of file diff --git a/website/common/locales/ja/groups.json b/website/common/locales/ja/groups.json index 8b15671800..3bccd536f5 100644 --- a/website/common/locales/ja/groups.json +++ b/website/common/locales/ja/groups.json @@ -438,7 +438,7 @@ "leaderChanged": "リーダーが変更されました。", "groupNoNotifications": "注 : このギルドはメンバー数が多すぎて通知ができません!自分のメッセージに返信がないか頻繁に確認するようにしてください。", "whatIsWorldBoss": "ワールドボスって何?", - "worldBossDesc": "ワールドボスはHabiticaのコミュニティが一緒になってタスクをこなすことで協力なモンスターを倒す特別なイベントです!全てのHabiticaユーザーは、ロッジで休んでいたりクエストの期間中ずっとHabiticaを使っていない人も含め、討伐の報酬が与えられます。", + "worldBossDesc": "ワールドボスは、Habiticaのコミュニティが一緒になってタスクをこなすことで、強力なモンスターを倒す特別なイベントです!全てのHabiticaユーザーには、ロッジで休んでいたりクエストの期間中ずっとHabiticaを使っていない人も含め、討伐の報酬が与えられます。", "worldBossLink": "WikiでHabiticaの昔のワールドボスについてもっと読んでみよう。", "worldBossBullet1": "タスクを片付けてワールドボスにダメージを与えよう", "worldBossBullet2": "ワールドボスからサボったタスクの分のダメージを食らうことはありませんが、そのかわりに怒りメーターが上昇してゆきます。もしメーターが一杯になると、ボスはHabiticaの店主の誰か一人を攻撃してしまいます!", diff --git a/website/common/locales/pt/content.json b/website/common/locales/pt/content.json index de8c7219b9..400efd5594 100644 --- a/website/common/locales/pt/content.json +++ b/website/common/locales/pt/content.json @@ -206,7 +206,7 @@ "hatchingPotionRainbow": "Arco-Íris", "hatchingPotionGlass": " de Vidro", "hatchingPotionGlow": "Fluorescente", - "hatchingPotionFrost": "Frost", + "hatchingPotionFrost": "Geada", "hatchingPotionNotes": "Utilize isto num ovo, e ele chocará como um mascote <%= potText(locale) %>.", "premiumPotionAddlNotes": "Não utilizável nos ovos de mascote de missão.", "foodMeat": "Carne", diff --git a/website/common/locales/pt/gear.json b/website/common/locales/pt/gear.json index 499fc8984e..66c971f64c 100644 --- a/website/common/locales/pt/gear.json +++ b/website/common/locales/pt/gear.json @@ -440,8 +440,8 @@ "armorSpecialSamuraiArmorNotes": "Esta armadura forte, é feita de escamas unidas por elegantes fios de seda. Aumenta Percepção em <%= per %>.", "armorSpecialTurkeyArmorBaseText": "Armadura de Peru", "armorSpecialTurkeyArmorBaseNotes": "Mantenha as suas coxas quentes e confortáveis com esta armadura de penas! Não confere benefícios.", - "armorSpecialTurkeyArmorGildedText": "Gilded Turkey Armor", - "armorSpecialTurkeyArmorGildedNotes": "Strut your stuff in this seasonally shiny armor! Confers no benefit.", + "armorSpecialTurkeyArmorGildedText": "Armadura Dourada de Peru", + "armorSpecialTurkeyArmorGildedNotes": "Pavonei-se com esta armadura brilhante sazonal! Não confere benefícios.", "armorSpecialYetiText": "Túnica de Domador de Ieti", "armorSpecialYetiNotes": "Felpudo e feroz. Aumenta Constituição em <%= con %>. Equipamento Edição Limitada de Inverno 2013-2014.", "armorSpecialSkiText": "Parca Assa-ski-na", @@ -778,8 +778,8 @@ "armorArmoireGlassblowersCoverallsNotes": "These coveralls will protect you while you're making masterpieces with hot molten glass. Increases Constitution by <%= con %>. Enchanted Armoire: Glassblower Set (Item 2 of 4).", "armorArmoireBluePartyDressText": "Blue Party Dress", "armorArmoireBluePartyDressNotes": "You're perceptive, tough, smart, and so fashionable! Increases Perception, Strength, and Constitution by <%= attrs %> each. Enchanted Armoire: Blue Hairbow Set (Item 2 of 2).", - "armorArmoirePiraticalPrincessGownText": "Piratical Princess Gown", - "armorArmoirePiraticalPrincessGownNotes": "This luxuriant garment has many pockets for concealing weapons and loot! Increases Perception by <%= per %>. Enchanted Armoire: Piratical Princess Set (Item 2 of 4).", + "armorArmoirePiraticalPrincessGownText": "Vestido de Princesa Pirata", + "armorArmoirePiraticalPrincessGownNotes": "Esta vestimenta luxuosa tem muitos bolsos para esconder armas e saque! Aumenta Percepção em <%= per %>. Armário Encantado: Conjunto de Princesa Pirata (Item 2 de 4).", "armorArmoireJeweledArcherArmorText": "Armadura de Gemas de Arqueiro", "armorArmoireJeweledArcherArmorNotes": "Esta armadura criada com requinte irá protegê-lo de projéteis ou Tarefas Diárias vermelhas vagueantes! Aumenta Constituição em <%= con %>. Armário Encantado: Conjunto de Arqueiro de Jóias (Item 2 de 3).", "armorArmoireCoverallsOfBookbindingText": "Coveralls of Bookbinding", @@ -1032,8 +1032,8 @@ "headSpecialSummer2018MageNotes": "Glare dolorously upon anyone who dares say you look like a “tastyfish”. Increases Perception by <%= per %>. Limited Edition 2018 Summer Gear.", "headSpecialSummer2018HealerText": "Merfolk Monarch Crown", "headSpecialSummer2018HealerNotes": "Adorned with aquamarine, this finned diadem marks leadership of folk, fish, and those who are a bit of both! Increases Intelligence by <%= int %>. Limited Edition 2018 Summer Gear.", - "headSpecialFall2018RogueText": "Alter Ego Face", - "headSpecialFall2018RogueNotes": "Most of us hide away our inward struggles. This mask shows that we all experience tension between our good and bad impulses. Plus it comes with a sweet hat! Increases Perception by <%= per %>. Limited Edition 2018 Autumn Gear.", + "headSpecialFall2018RogueText": "Cara de Alter Ego", + "headSpecialFall2018RogueNotes": "A maioria de nós esconde as nossas lutas internas. Esta máscara mostra que todos nós experimentamos tensão entre os nossos impulsos bons e maus. E vem com um chapéu bastante fixe! Aumenta Percepção em <%= per %>. Equipamento de Edição Limitada do Outono de 2018.", "headSpecialFall2018WarriorText": "Minotaur Visage", "headSpecialFall2018WarriorNotes": "This fearsome mask shows you can really take your tasks by the horns! Increases Strength by <%= str %>. Limited Edition 2018 Autumn Gear.", "headSpecialFall2018MageText": "Candymancer's Hat", diff --git a/website/common/locales/pt/groups.json b/website/common/locales/pt/groups.json index de482c910f..0e8448e59d 100644 --- a/website/common/locales/pt/groups.json +++ b/website/common/locales/pt/groups.json @@ -446,23 +446,23 @@ "worldBossBullet4": "Visite a Pousada com regularidade para ver o progresso do Chefe Global e ataques de Raiva", "worldBoss": "Chefe Global", "groupPlanTitle": "Precisa de mais para sua equipa?", - "groupPlanDesc": "Managing a small team or organizing household chores? Our group plans grant you exclusive access to a private task board and chat area dedicated to you and your group members!", + "groupPlanDesc": "Gerenciando uma pequena equipa ou organizando tarefas domésticas? Nosso planos do grupo te concedes acesso exclusivo a um painel de tarefas privado e área de conversa dedicada a você e aos membros do seu grupo!", "billedMonthly": "*faturado como uma subscrição mensal", - "teamBasedTasksList": "Team-Based Task List", - "teamBasedTasksListDesc": "Set up an easily-viewed shared task list for the group. Assign tasks to your fellow group members, or let them claim their own tasks to make it clear what everyone is working on!", - "groupManagementControls": "Group Management Controls", - "groupManagementControlsDesc": "Use task approvals to verify that a task that was really completed, add Group Managers to share responsibilities, and enjoy a private group chat for all team members.", - "inGameBenefits": "In-Game Benefits", - "inGameBenefitsDesc": "Group members get an exclusive Jackalope Mount, as well as full subscription benefits, including special monthly equipment sets and the ability to buy gems with gold.", - "inspireYourParty": "Inspire your party, gamify life together.", - "letsMakeAccount": "First, let’s make you an account", - "nameYourGroup": "Next, Name Your Group", - "exampleGroupName": "Example: Avengers Academy", + "teamBasedTasksList": "Lista de Tarefas da Equipa", + "teamBasedTasksListDesc": "Configure uma lista de tarefas compartilhada facilmente e visível para todo o grupo. Atribua tarefas aos membros do seu grupo ou deixe que eles as reivindiquem para deixar claro em que cada um está trabalhando!", + "groupManagementControls": "Controlos de Gerenciamento de Grupo", + "groupManagementControlsDesc": "Use aprovações de tarefas para verificar se esta foi realmente concluída, adicione Gerentes de Grupo para compartilhar responsabilidades e desfrute de uma espaço privado para conversação, disponível para todos os membros da equipa.", + "inGameBenefits": "Benefícios no Jogo", + "inGameBenefitsDesc": "Membros do Grupo ganham uma exclusive montaria Lebrílope Púrpura Real, assim como benefícios de subscrição, que incluem mensalmente um conjunto de equipamentos especiais e a competência de comprar gemas com ouro.", + "inspireYourParty": "Inspire sua equipa, gamifique suas vidas juntos.", + "letsMakeAccount": "Primeiramente, vamos fazer uma conta para você", + "nameYourGroup": "Depois, dê um nome para seu Grupo", + "exampleGroupName": "Exemplo: Academia dos Vingadores", "exampleGroupDesc": "For those selected to join the training academy for The Avengers Superhero Initiative", - "thisGroupInviteOnly": "This group is invitation only.", - "gettingStarted": "Getting Started", - "congratsOnGroupPlan": "Congratulations on creating your new Group! Here are a few answers to some of the more commonly asked questions.", - "whatsIncludedGroup": "What's included in the subscription", + "thisGroupInviteOnly": "Este Grupo é apenas para convidados.", + "gettingStarted": "Começando", + "congratsOnGroupPlan": "Parabéns! Você criou um novo Grupo! Aqui estão respostas para algumas questões mais frequentes.", + "whatsIncludedGroup": "O que está incluso na subscrição", "whatsIncludedGroupDesc": "All members of the Group receive full subscription benefits, including the monthly subscriber items, the ability to buy Gems with Gold, and the Royal Purple Jackalope mount, which is exclusive to users with a Group Plan membership.", "howDoesBillingWork": "How does billing work?", "howDoesBillingWorkDesc": "Group Leaders are billed based on group member count on a monthly basis. This charge includes the $9 (USD) price for the Group Leader subscription, plus $3 USD for each additional group member. For example: A group of four users will cost $18 USD/month, as the group consists of 1 Group Leader + 3 group members.", @@ -473,8 +473,8 @@ "howToRequireApprovalDesc2": "Group Leaders and Managers can approve completed Tasks directly from the Task Board or from the Notifications panel.", "whatIsGroupManager": "What is a Group Manager?", "whatIsGroupManagerDesc": "A Group Manager is a user role that do not have access to the group's billing details, but can create, assign, and approve shared Tasks for the Group's members. Promote Group Managers from the Group’s member list.", - "goToTaskBoard": "Go to Task Board", - "sharedCompletion": "Shared Completion", + "goToTaskBoard": "Ir para o Quadro de Tarefas", + "sharedCompletion": "Compartilhar Completos", "recurringCompletion": "None - Group task does not complete", "singleCompletion": "Single - Completes when any assigned user finishes", "allAssignedCompletion": "All - Completes when all assigned users finish" diff --git a/website/common/locales/ru/gear.json b/website/common/locales/ru/gear.json index 97a4250c77..88ff258624 100644 --- a/website/common/locales/ru/gear.json +++ b/website/common/locales/ru/gear.json @@ -440,8 +440,8 @@ "armorSpecialSamuraiArmorNotes": "Эта прочная чешуйчатая броня удерживается вместе элегантными шёлковыми шнурами. Увеличивает восприятие на <%= per %>.", "armorSpecialTurkeyArmorBaseText": "Индюшачья броня", "armorSpecialTurkeyArmorBaseNotes": "Держите свои ноги в тепле и уюте в этой перистой броне! Бонусов не дает.", - "armorSpecialTurkeyArmorGildedText": "Gilded Turkey Armor", - "armorSpecialTurkeyArmorGildedNotes": "Strut your stuff in this seasonally shiny armor! Confers no benefit.", + "armorSpecialTurkeyArmorGildedText": "Позолоченная индюшачья броня", + "armorSpecialTurkeyArmorGildedNotes": "Покажите, на что вы способны в этой блестящей броне! Бонусов не дает.", "armorSpecialYetiText": "Мантия укротителя Йети", "armorSpecialYetiNotes": "Пушистая и свирепая. Увеличивает телосложение на <%= con %>. Ограниченный выпуск зимы 2013-2014.", "armorSpecialSkiText": "Парка лыжника-ассасина", @@ -868,8 +868,8 @@ "headSpecialNamingDay2017Notes": "С днём наречения! Носите этот суровый шлем с перьями, празднуя новое имя Habitica. Бонусов не даёт.", "headSpecialTurkeyHelmBaseText": "Шлем индейки", "headSpecialTurkeyHelmBaseNotes": "Ваш костюм на день благодарения будет закончен с этим шлемом с клювом.", - "headSpecialTurkeyHelmGildedText": "Gilded Turkey Helm", - "headSpecialTurkeyHelmGildedNotes": "Gobble gobble! Bling bling! Confers no benefit.", + "headSpecialTurkeyHelmGildedText": "Позолоченный индюшачий шлем", + "headSpecialTurkeyHelmGildedNotes": "Кулдык-кулдык! Драгоценности! Бонусов не дает.", "headSpecialNyeText": "Шляпа праздника абсурда", "headSpecialNyeNotes": "Вы получили Шляпу Праздника Абсурда! Носите ее с гордостью в Новый год! Бонусов не дает.", "headSpecialYetiText": "Шлем укротителя Йети", @@ -1501,8 +1501,8 @@ "backSpecialAetherCloakNotes": "Этот плащ когда-то принадлежал самой последней из ордена Мастеров. Увеличивает восприятие на <%= per %>. ", "backSpecialTurkeyTailBaseText": "Хвост индейки", "backSpecialTurkeyTailBaseNotes": "Носите ваш превосходный Хвост Индейки с гордостью, пока празднуете. Бонусов не дает.", - "backSpecialTurkeyTailGildedText": "Gilded Turkey Tail", - "backSpecialTurkeyTailGildedNotes": "Plumage fit for a parade! Confers no benefit.", + "backSpecialTurkeyTailGildedText": "Позолоченный индюшачий хвост", + "backSpecialTurkeyTailGildedNotes": "Перья подходят для парада! Бонусов не дает.", "backBearTailText": "Медвежий хвост", "backBearTailNotes": "С этим хвостом вы похоже на смелого медведя! Бонусов не дает.", "backCactusTailText": "Кактусовый хвост", diff --git a/website/common/locales/tr/gear.json b/website/common/locales/tr/gear.json index ff30b28ed5..243a9cc100 100644 --- a/website/common/locales/tr/gear.json +++ b/website/common/locales/tr/gear.json @@ -440,7 +440,7 @@ "armorSpecialSamuraiArmorNotes": "Bu güçlü, pullu zırh zarif ipek ipliklerle bir arada tutulur. Sezgiyi <%= per %> puan arttırır.", "armorSpecialTurkeyArmorBaseText": "Hindi Zırhı", "armorSpecialTurkeyArmorBaseNotes": "Butlarını bu tüylü zırhın içinde sıcak ve rahat tut! Bir fayda sağlamaz.", - "armorSpecialTurkeyArmorGildedText": "Gilded Turkey Armor", + "armorSpecialTurkeyArmorGildedText": "Yaldızlı Hindi Zırhı", "armorSpecialTurkeyArmorGildedNotes": "Strut your stuff in this seasonally shiny armor! Confers no benefit.", "armorSpecialYetiText": "Yeti Terbiyecisi Cübbesi", "armorSpecialYetiNotes": "Kabarık ve vahşi. Bünyeyi <%= con %> puan arttırır. Sınırlı Sürüm 2013-2014 Kış Ekipmanı.", @@ -868,7 +868,7 @@ "headSpecialNamingDay2017Notes": "Adlandırma Günü kutlu olsun! Habitica'yı kutlarken bu vahşi ve tüylü başlığı giy. Bir fayda sağlamaz.", "headSpecialTurkeyHelmBaseText": "Hindi Miğferi", "headSpecialTurkeyHelmBaseNotes": "Bu gagalı miğferi kafana geçirdiğinde Hindi Günü kıyafetin tamamlanmış olacak! Bir fayda sağlamaz.", - "headSpecialTurkeyHelmGildedText": "Gilded Turkey Helm", + "headSpecialTurkeyHelmGildedText": "Yaldızlı Hindi Miğferi", "headSpecialTurkeyHelmGildedNotes": "Gobble gobble! Bling bling! Confers no benefit.", "headSpecialNyeText": "Absürd Parti Şapkası", "headSpecialNyeNotes": "Bir Absürd Parti Şapkası kazandın! Yeni yılda eğlenirken bunu gururla tak! Bir fayda sağlamaz.", @@ -1501,7 +1501,7 @@ "backSpecialAetherCloakNotes": "Bu pelerin bir zamanlar Kayıp Uzmaneleman'ın kendine aitti. Sezgiyi <%= per %> puan arttırır.", "backSpecialTurkeyTailBaseText": "Hindi Kuyruğu", "backSpecialTurkeyTailBaseNotes": "Kutlama yaparken asil Hindi Kuyruğunu gururla tak! Bir fayda sağlamaz.", - "backSpecialTurkeyTailGildedText": "Gilded Turkey Tail", + "backSpecialTurkeyTailGildedText": "Yaldızlı Hindi Kuyruğu", "backSpecialTurkeyTailGildedNotes": "Plumage fit for a parade! Confers no benefit.", "backBearTailText": "Ayı Kuyruğu", "backBearTailNotes": "Bu kuyruk seni cesur bir ayı gibi gösterecek! Bir fayda sağlamaz.", diff --git a/website/common/locales/zh_TW/backgrounds.json b/website/common/locales/zh_TW/backgrounds.json index 142a382642..101997da0a 100644 --- a/website/common/locales/zh_TW/backgrounds.json +++ b/website/common/locales/zh_TW/backgrounds.json @@ -263,8 +263,8 @@ "backgroundMistShroudedMountainText": "雲霧繚繞的山鋒", "backgroundMistShroudedMountainNotes": "雲霧繚繞的山鋒頂端", "backgrounds052017": "第 36 組: 2017 年 5 月推出", - "backgroundGuardianStatuesText": "守護者石像", - "backgroundGuardianStatuesNotes": "在守護者石像前守夜", + "backgroundGuardianStatuesText": "護衛石像", + "backgroundGuardianStatuesNotes": "在護衛石像前守夜", "backgroundHabitCityStreetsText": "習慣城市的街道", "backgroundHabitCityStreetsNotes": "探索習慣城市的街道", "backgroundOnATreeBranchText": "在樹的分支上", diff --git a/website/common/locales/zh_TW/character.json b/website/common/locales/zh_TW/character.json index b4abc6493c..1e98cb99a4 100644 --- a/website/common/locales/zh_TW/character.json +++ b/website/common/locales/zh_TW/character.json @@ -166,7 +166,7 @@ "streaksFrozenText": "每日任務連擊數將不會因為未完成而遭重置。", "respawn": "重生!", "youDied": "您已經死亡!", - "dieText": "您已經失去一個等級、所有的金幣、和隨機一件裝備。起來吧,Habitica 鄉民,然後再試一次!請遏制這些負面的習慣,認真完成每日任務,並在又快要撐不住時使用生命藥免於死亡!", + "dieText": "您已經失去一個等級、所有的金幣、和隨機一件裝備。起來吧,Habitica 鄉民,然後再試一次!請遏制這些負面的習慣,認真完成每日任務,並在又快要撐不住時使用治療藥免於死亡!", "sureReset": "您確定嗎? 這將花費 3 顆鑽石,且會重置您的角色職業和已分配的屬性點數 (它們將全數退還給您並且可以重新分配)。", "purchaseFor": "花費 <%= cost %> 顆鑽石˙購買?", "purchaseForHourglasses": "花費 <%= cost %> 個沙漏購買?", diff --git a/website/common/locales/zh_TW/communityguidelines.json b/website/common/locales/zh_TW/communityguidelines.json index 3b24e24c93..96c6aadc45 100644 --- a/website/common/locales/zh_TW/communityguidelines.json +++ b/website/common/locales/zh_TW/communityguidelines.json @@ -99,7 +99,7 @@ "commGuideHeadingMeet": "一起來認識我們的工作人員與管理員們吧!", "commGuidePara006": "Habitica 有一群努力不懈的俠客,他們與工作人員們合作,一起讓社群維持平穩、充實、無白目行為發生。他們雖然各有負責的領域,但有時會應要求出現在其他社交領域。", "commGuidePara007": "工作人員的標籤是紫色帶皇冠記號。他們的頭銜是「英雄」。", - "commGuidePara008": "管理員的標籤是深藍色並附帶星記號。他們的頭銜是\"守護者\"。唯一的例外是Bailey,她是一位NPC,有黑底綠字並帶有星記號的標籤。", + "commGuidePara008": "管理員的標籤是深藍色並附帶星記號。他們的頭銜是\"護衛\"。唯一的例外是Bailey,她是一位NPC,有黑底綠字並帶有星記號的標籤。", "commGuidePara009": "現在的工作人員成員分別是(從左到右):", "commGuideAKA": "<%= habitName %> a.k.a. <%= realName %>", "commGuideOnTrello": "負責 Trello 的 <%= trelloName %>", diff --git a/website/common/locales/zh_TW/content.json b/website/common/locales/zh_TW/content.json index f92f9f500d..699184bb28 100644 --- a/website/common/locales/zh_TW/content.json +++ b/website/common/locales/zh_TW/content.json @@ -2,9 +2,9 @@ "potionText": "治療藥水", "potionNotes": "回復 15 點生命值 (立即使用 )", "armoireText": "神秘寶箱", - "armoireNotesFull": "打開神祕寶箱而隨機獲得特殊裝備,經驗,或食物!裝備配件還有:", - "armoireLastItem": "你找到了神祕寶箱裡最後一件稀有裝備。", - "armoireNotesEmpty": "每個月的第一個禮拜,神祕寶箱都會推出新的裝備。在那之前,請繼續點擊神祕寶箱以獲得經驗和食物!", + "armoireNotesFull": "打開神祕寶箱可隨機獲得特殊裝備、經驗、或食物!剩餘裝備數量: ", + "armoireLastItem": "您在神祕寶箱裡找到最後一件的稀有裝備! ", + "armoireNotesEmpty": "每個月的第一個禮拜,神祕寶箱都將會推出新的裝備。在那之前,請繼續購買神祕寶箱以獲得經驗和食物!", "dropEggWolfText": "狼", "dropEggWolfMountText": "狼", "dropEggWolfAdjective": "一隻忠誠的", @@ -13,10 +13,10 @@ "dropEggTigerCubAdjective": "一隻兇猛的", "dropEggPandaCubText": "小熊貓", "dropEggPandaCubMountText": "熊貓", - "dropEggPandaCubAdjective": "一隻溫馴的", + "dropEggPandaCubAdjective": "一隻溫和的", "dropEggLionCubText": "小獅子", "dropEggLionCubMountText": "獅子", - "dropEggLionCubAdjective": "一隻豪氣的", + "dropEggLionCubAdjective": "一隻萬獸之王的", "dropEggFoxText": "狐狸", "dropEggFoxMountText": "狐狸", "dropEggFoxAdjective": "一隻狡詐的", @@ -25,19 +25,19 @@ "dropEggFlyingPigAdjective": "一隻怪誕的", "dropEggDragonText": "龍", "dropEggDragonMountText": "龍", - "dropEggDragonAdjective": "一隻強壯偉大的", + "dropEggDragonAdjective": "一隻威武的", "dropEggCactusText": "仙人掌", "dropEggCactusMountText": "仙人掌", - "dropEggCactusAdjective": "一隻刺手的", + "dropEggCactusAdjective": "一株刺手的", "dropEggBearCubText": "小熊", "dropEggBearCubMountText": "熊", - "dropEggBearCubAdjective": "一隻勇敢的", + "dropEggBearCubAdjective": "一隻英勇的", "questEggGryphonText": "獅鷲獸", "questEggGryphonMountText": "獅鷲獸", - "questEggGryphonAdjective": "一隻驕傲的", + "questEggGryphonAdjective": "一隻自豪的", "questEggHedgehogText": "刺猬", "questEggHedgehogMountText": "刺猬", - "questEggHedgehogAdjective": "一隻尖銳的", + "questEggHedgehogAdjective": "一隻多刺的", "questEggDeerText": "鹿", "questEggDeerMountText": "鹿", "questEggDeerAdjective": "一隻優雅的", @@ -46,169 +46,169 @@ "questEggEggAdjective": "一顆色彩繽紛的", "questEggRatText": "老鼠", "questEggRatMountText": "老鼠", - "questEggRatAdjective": "一隻和善的", + "questEggRatAdjective": "一隻善於交際的", "questEggOctopusText": "章魚", "questEggOctopusMountText": "章魚", - "questEggOctopusAdjective": "一隻滑溜的", + "questEggOctopusAdjective": "一條滑溜溜的", "questEggSeahorseText": "海馬", "questEggSeahorseMountText": "海馬", - "questEggSeahorseAdjective": "一隻珍奇的", + "questEggSeahorseAdjective": "一隻超凡的", "questEggParrotText": "鸚鵡", "questEggParrotMountText": "鸚鵡", - "questEggParrotAdjective": "一隻朝氣的", + "questEggParrotAdjective": "一隻朝氣滿滿的", "questEggRoosterText": "公雞", "questEggRoosterMountText": "公雞", "questEggRoosterAdjective": "一隻傲氣的", "questEggSpiderText": "蜘蛛", "questEggSpiderMountText": "蜘蛛", - "questEggSpiderAdjective": "一隻美麗的", + "questEggSpiderAdjective": "一隻有藝術天分的", "questEggOwlText": "貓頭鷹", "questEggOwlMountText": "貓頭鷹", "questEggOwlAdjective": "一隻有智慧的", "questEggPenguinText": "企鵝", "questEggPenguinMountText": "企鵝", - "questEggPenguinAdjective": "一隻精明的", + "questEggPenguinAdjective": "一隻敏銳的", "questEggTRexText": "暴龍", "questEggTRexMountText": "暴龍", - "questEggTRexAdjective": "一隻雙手短短的", + "questEggTRexAdjective": "一隻雙手很短的", "questEggRockText": "巨石", - "questEggRockMountText": "石頭", + "questEggRockMountText": "巨石", "questEggRockAdjective": "一顆活潑的", "questEggBunnyText": "兔子", "questEggBunnyMountText": "兔子", "questEggBunnyAdjective": "一隻柔軟的", "questEggSlimeText": "棉花糖史萊姆", - "questEggSlimeMountText": "棉花糖粘液", - "questEggSlimeAdjective": "一坨甜甜的", + "questEggSlimeMountText": "棉花糖史萊姆", + "questEggSlimeAdjective": "一團甜美的", "questEggSheepText": "羊", "questEggSheepMountText": "羊", "questEggSheepAdjective": "一隻毛蓬蓬的", "questEggCuttlefishText": "烏賊", "questEggCuttlefishMountText": "烏賊", - "questEggCuttlefishAdjective": "一隻可愛的", + "questEggCuttlefishAdjective": "一條逗趣的", "questEggWhaleText": "鯨魚", "questEggWhaleMountText": "鯨魚", - "questEggWhaleAdjective": "一隻濺水的", + "questEggWhaleAdjective": "一隻會濺水的", "questEggCheetahText": "獵豹", "questEggCheetahMountText": "獵豹", - "questEggCheetahAdjective": "一隻誠實的", + "questEggCheetahAdjective": "一隻正直的", "questEggHorseText": "馬", "questEggHorseMountText": "馬", "questEggHorseAdjective": "一隻奔馳的", "questEggFrogText": "青蛙", "questEggFrogMountText": "青蛙", - "questEggFrogAdjective": "一隻高貴的", + "questEggFrogAdjective": "一隻王子似的", "questEggSnakeText": "蛇", "questEggSnakeMountText": "蛇", - "questEggSnakeAdjective": "一隻滑行的", + "questEggSnakeAdjective": "一條滑行的", "questEggUnicornText": "獨角獸", - "questEggUnicornMountText": "有翼獨角獸", - "questEggUnicornAdjective": "一隻神奇的", + "questEggUnicornMountText": "雙翼獨角獸", + "questEggUnicornAdjective": "一隻魔幻的", "questEggSabretoothText": "劍齒虎", "questEggSabretoothMountText": "劍齒虎", - "questEggSabretoothAdjective": "兇猛", + "questEggSabretoothAdjective": "一隻兇猛的", "questEggMonkeyText": "猴子", "questEggMonkeyMountText": "猴子 ", - "questEggMonkeyAdjective": "淘氣", - "questEggSnailText": "蛇", - "questEggSnailMountText": "蛇", - "questEggSnailAdjective": "緩慢但穩定的", - "questEggFalconText": "鷹", - "questEggFalconMountText": "鷹", - "questEggFalconAdjective": "迅捷的", + "questEggMonkeyAdjective": "一隻淘氣的", + "questEggSnailText": "蝸牛", + "questEggSnailMountText": "蝸牛", + "questEggSnailAdjective": "一條緩慢但有毅力的", + "questEggFalconText": "隼", + "questEggFalconMountText": "隼", + "questEggFalconAdjective": "一隻迅捷的", "questEggTreelingText": "樹精", "questEggTreelingMountText": "樹精", - "questEggTreelingAdjective": "一顆茂盛的", + "questEggTreelingAdjective": "一棵茂盛的", "questEggAxolotlText": "蠑螈", "questEggAxolotlMountText": "蠑螈", - "questEggAxolotlAdjective": "小小", + "questEggAxolotlAdjective": "一隻嬌小的", "questEggTurtleText": "海龜", "questEggTurtleMountText": "巨型海龜", - "questEggTurtleAdjective": "一顆寧靜的", + "questEggTurtleAdjective": "一隻寧靜的", "questEggArmadilloText": "犰狳", "questEggArmadilloMountText": "犰狳", - "questEggArmadilloAdjective": "武裝的", - "questEggCowText": "牛", - "questEggCowMountText": "牛", - "questEggCowAdjective": "一顆鳴叫著的", - "questEggBeetleText": "獨角仙", - "questEggBeetleMountText": "獨角仙", - "questEggBeetleAdjective": "一顆難以攻破的", + "questEggArmadilloAdjective": "一隻覆滿鱗片的", + "questEggCowText": "乳牛", + "questEggCowMountText": "乳牛", + "questEggCowAdjective": "一頭哞哞叫的", + "questEggBeetleText": "甲蟲", + "questEggBeetleMountText": "甲蟲", + "questEggBeetleAdjective": "一隻無敵的", "questEggFerretText": "雪貂", "questEggFerretMountText": "雪貂", - "questEggFerretAdjective": "一顆覆蓋毛皮的", + "questEggFerretAdjective": "一隻毛絨絨的", "questEggSlothText": "樹賴", "questEggSlothMountText": "樹賴", - "questEggSlothAdjective": "一顆快速的", + "questEggSlothAdjective": "一隻迅捷的", "questEggTriceratopsText": "三角龍", "questEggTriceratopsMountText": "三角龍", - "questEggTriceratopsAdjective": "一隻詭計多端的", + "questEggTriceratopsAdjective": "一隻狡猾的", "questEggGuineaPigText": "豚鼠", "questEggGuineaPigMountText": "豚鼠", - "questEggGuineaPigAdjective": "一隻浮躁的", + "questEggGuineaPigAdjective": "一隻眼花撩亂的", "questEggPeacockText": "孔雀", "questEggPeacockMountText": "孔雀", "questEggPeacockAdjective": "一隻昂首闊步的", "questEggButterflyText": "毛毛蟲", "questEggButterflyMountText": "蝴蝶", - "questEggButterflyAdjective": "一個可愛的", + "questEggButterflyAdjective": "一隻可愛的", "questEggNudibranchText": "海蛞蝓", "questEggNudibranchMountText": "海蛞蝓", "questEggNudibranchAdjective": "一隻俏皮的", "questEggHippoText": "河馬", "questEggHippoMountText": "河馬", - "questEggHippoAdjective": "一個快樂的", + "questEggHippoAdjective": "一隻快樂的", "questEggYarnText": "毛線", "questEggYarnMountText": "飛天魔毯", - "questEggYarnAdjective": "毛織物", + "questEggYarnAdjective": "羊毛", "questEggPterodactylText": "翼手龍", "questEggPterodactylMountText": "翼手龍", - "questEggPterodactylAdjective": "誠信的", + "questEggPterodactylAdjective": "一隻誠信的", "questEggBadgerText": "獾", "questEggBadgerMountText": "獾", - "questEggBadgerAdjective": "忙碌的", + "questEggBadgerAdjective": "一隻忙碌的", "questEggSquirrelText": "松鼠", "questEggSquirrelMountText": "松鼠", - "questEggSquirrelAdjective": "尾巴毛茸茸的", + "questEggSquirrelAdjective": "一隻尾巴毛茸茸的", "questEggSeaSerpentText": "大海蛇", "questEggSeaSerpentMountText": "大海蛇", - "questEggSeaSerpentAdjective": "閃耀的", + "questEggSeaSerpentAdjective": "一隻閃耀的", "questEggKangarooText": "袋鼠", "questEggKangarooMountText": "袋鼠", - "questEggKangarooAdjective": "敏銳的", + "questEggKangarooAdjective": "一隻敏捷的", "questEggAlligatorText": "鱷魚", "questEggAlligatorMountText": "鱷魚", - "questEggAlligatorAdjective": "狡詐的", - "eggNotes": "把孵化藥水倒在寵物蛋上會把它孵化成一隻<%= eggAdjective(locale) %> <%= eggText(locale) %>。", + "questEggAlligatorAdjective": "一條狡詐的", + "eggNotes": "將孵化藥水倒在這顆寵物蛋上,它就能將孵化成<%= eggAdjective(locale) %><%= eggText(locale) %>。", "hatchingPotionBase": "普通", - "hatchingPotionWhite": "白色", + "hatchingPotionWhite": "灰白", "hatchingPotionDesert": "沙漠", - "hatchingPotionRed": "紅色", + "hatchingPotionRed": "赤紅", "hatchingPotionShade": "暗影", "hatchingPotionSkeleton": "骸骨", "hatchingPotionZombie": "殭屍", - "hatchingPotionCottonCandyPink": "棉花糖粉紅色", - "hatchingPotionCottonCandyBlue": "棉花糖粉藍色", - "hatchingPotionGolden": "金色", - "hatchingPotionSpooky": "怪異", + "hatchingPotionCottonCandyPink": "棉染粉紅", + "hatchingPotionCottonCandyBlue": "棉染藍", + "hatchingPotionGolden": "金黃", + "hatchingPotionSpooky": "幽靈", "hatchingPotionPeppermint": "薄荷", "hatchingPotionFloral": "花卉", - "hatchingPotionAquatic": "水族", + "hatchingPotionAquatic": "水生", "hatchingPotionEmber": "餘燼", "hatchingPotionThunderstorm": "雷雨", "hatchingPotionGhost": "幽靈", "hatchingPotionRoyalPurple": "紫禦", "hatchingPotionHolly": "冬青", - "hatchingPotionCupid": "朱鹭色", - "hatchingPotionShimmer": "閃爍", + "hatchingPotionCupid": "丘比特", + "hatchingPotionShimmer": "閃亮亮", "hatchingPotionFairy": "仙女", "hatchingPotionStarryNight": "星夜", "hatchingPotionRainbow": "彩虹", "hatchingPotionGlass": "玻璃", "hatchingPotionGlow": "暗黑閃亮", "hatchingPotionFrost": "冰霜", - "hatchingPotionNotes": "把它倒在寵物蛋上可以孵化出一隻<%= potText(locale) %>寵物。", - "premiumPotionAddlNotes": "不能夠在副本寵物蛋上使用。", + "hatchingPotionNotes": "將它倒在寵物蛋上即可孵化出一隻<%= potText(locale) %>寵物。", + "premiumPotionAddlNotes": "無法用於副本寵物蛋。", "foodMeat": "肉", "foodMeatThe": "肉", "foodMeatA": "肉", @@ -230,9 +230,9 @@ "foodRottenMeat": "腐肉", "foodRottenMeatThe": "腐肉", "foodRottenMeatA": "腐肉", - "foodCottonCandyPink": "粉紅色棉花糖", - "foodCottonCandyPinkThe": "粉紅色棉花糖", - "foodCottonCandyPinkA": "粉紅色棉花糖", + "foodCottonCandyPink": "粉紅棉花糖", + "foodCottonCandyPinkThe": "粉紅棉花糖", + "foodCottonCandyPinkA": "粉紅棉花糖", "foodCottonCandyBlue": "藍色棉花糖", "foodCottonCandyBlueThe": "藍色棉花糖", "foodCottonCandyBlueA": "藍色棉花糖", @@ -245,12 +245,12 @@ "foodCakeBase": "普通蛋糕", "foodCakeBaseThe": "普通蛋糕", "foodCakeBaseA": "普通蛋糕", - "foodCakeCottonCandyBlue": "藍色棉花糖蛋糕", - "foodCakeCottonCandyBlueThe": "藍色棉花糖蛋糕", - "foodCakeCottonCandyBlueA": "藍色棉花糖蛋糕", - "foodCakeCottonCandyPink": "粉紅棉花糖蛋糕", - "foodCakeCottonCandyPinkThe": "粉紅棉花糖蛋糕", - "foodCakeCottonCandyPinkA": "粉紅棉花糖蛋糕", + "foodCakeCottonCandyBlue": "棉染藍蛋糕", + "foodCakeCottonCandyBlueThe": "棉染藍蛋糕", + "foodCakeCottonCandyBlueA": "棉染藍蛋糕", + "foodCakeCottonCandyPink": "棉染粉紅蛋糕", + "foodCakeCottonCandyPinkThe": "棉染粉紅蛋糕", + "foodCakeCottonCandyPinkA": "棉染粉紅蛋糕", "foodCakeShade": "巧克力蛋糕", "foodCakeShadeThe": "巧克力蛋糕", "foodCakeShadeA": "巧克力蛋糕", @@ -260,9 +260,9 @@ "foodCakeGolden": "蜂蜜蛋糕", "foodCakeGoldenThe": "蜂蜜蛋糕", "foodCakeGoldenA": "蜂蜜蛋糕", - "foodCakeZombie": "過期蛋糕", - "foodCakeZombieThe": "過期蛋糕", - "foodCakeZombieA": "過期蛋糕", + "foodCakeZombie": "發霉蛋糕", + "foodCakeZombieThe": "發霉蛋糕", + "foodCakeZombieA": "發霉蛋糕", "foodCakeDesert": "沙子蛋糕", "foodCakeDesertThe": "沙子蛋糕", "foodCakeDesertA": "沙子蛋糕", @@ -275,12 +275,12 @@ "foodCandyBase": "普通糖果", "foodCandyBaseThe": "普通糖果", "foodCandyBaseA": "普通糖果", - "foodCandyCottonCandyBlue": "酸味藍色糖果", - "foodCandyCottonCandyBlueThe": "酸味藍色糖果", - "foodCandyCottonCandyBlueA": "酸味藍色糖果", - "foodCandyCottonCandyPink": "酸味粉紅色糖果", - "foodCandyCottonCandyPinkThe": "酸味粉紅色糖果", - "foodCandyCottonCandyPinkA": "酸味粉紅色糖果", + "foodCandyCottonCandyBlue": "酸味藍糖果", + "foodCandyCottonCandyBlueThe": "酸味藍糖果", + "foodCandyCottonCandyBlueA": "酸味藍糖果", + "foodCandyCottonCandyPink": "酸味粉紅糖果", + "foodCandyCottonCandyPinkThe": "酸味粉紅糖果", + "foodCandyCottonCandyPinkA": "酸味粉紅糖果", "foodCandyShade": "巧克力糖果", "foodCandyShadeThe": "巧克力糖果", "foodCandyShadeA": "巧克力糖果", @@ -300,7 +300,7 @@ "foodCandyRedThe": "肉桂糖果", "foodCandyRedA": "肉桂糖果", "foodSaddleText": "鞍", - "foodSaddleNotes": "立即把你的一隻寵物變成坐騎。", - "foodSaddleSellWarningNote": "嘿!這是一個非常有用的物品!你知道怎麼對你的寵物使用鞍嗎?", - "foodNotes": "寵物吃了它,就會慢慢地長成強壯的坐騎。" + "foodSaddleNotes": "立即將您的一隻寵物變成坐騎。", + "foodSaddleSellWarningNote": "嘿!這是項非常有用的物品!那您知道怎麼對你的寵物使用鞍嗎?", + "foodNotes": "寵物吃了它,就會慢慢地成長為健壯的坐騎。" } \ No newline at end of file diff --git a/website/common/locales/zh_TW/contrib.json b/website/common/locales/zh_TW/contrib.json index a506121686..88b263ad12 100644 --- a/website/common/locales/zh_TW/contrib.json +++ b/website/common/locales/zh_TW/contrib.json @@ -1,5 +1,5 @@ { - "playerTiersDesc": "在聊天畫面中您看到使用者名稱上的顏色代表個人的貢獻者等級。等級越高,就證明他對Habitica的美術、程式碼、社群等地方貢獻得越多!", + "playerTiersDesc": "聊天畫面中使用者名稱上的顏色代表著個人的貢獻者等級。等級越高,就證明了他對Habitica 裡的美術、程式碼、社群等地方貢獻得越多!", "tier1": "等級 1 ( 夥伴 )", "tier2": "等級 2 ( 夥伴 )", "tier3": "等級 3 ( 精英 )", @@ -7,46 +7,46 @@ "tier5": "等級 5 ( 王者 )", "tier6": "等級 6 ( 王者 )", "tier7": "等級 7 ( 傳奇 )", - "tierModerator": "管理員 ( 守護者 )", + "tierModerator": "管理員 ( 護衛 )", "tierStaff": "工作人員 ( 英雄 )", "tierNPC": "NPC", "friend": "好友", - "friendFirst": "當您的意見 第一次被採納時,您將收到Habitica貢獻者的徽章。在酒館聊天時,您的名字將會被自豪地冠上貢獻者頭銜。作為貢獻的獎勵,您也將獲得3顆鑽石。", - "friendSecond": "當您第二次意見被採納時,您可以在獎勵商店買到水晶護甲。作為貢獻的獎勵,您也將獲得3顆鑽石。", + "friendFirst": "當您首度申請貢獻獎勵後,您將收到 Habitica貢獻者的徽章。在酒館聊天時,您的名字將會被自豪地冠上貢獻者頭銜。作為貢獻的獎勵,您也將獲得3顆鑽石。", + "friendSecond": "當您第二度申請貢獻獎勵後,您將可以在獎勵商店購買水晶護甲。作為貢獻的獎勵,您也將獲得3顆鑽石。", "elite": "精英", - "eliteThird": "當你的第三組意見被採用時,你可以在獎勵商店買到水晶頭盔。為了感謝你持續地工作,你還會收到3顆鑽石。", - "eliteFourth": "當你的第四組意見被採用時,你可以在獎勵商店買到水晶劍。為了感謝你持續地工作,你還會收到4顆鑽石。", - "champion": "冠軍", - "championFifth": "當你的第五組意見被採用時,你可以在獎勵商店買到水晶盾牌。為了感謝你持續地工作,你還會收到4顆鑽石。", - "championSixth": "當你的第六組意見被採用時,你會得到一個九頭蛇寵物。你還會收到4顆鑽石。", + "eliteThird": "當您第三度申請貢獻獎勵後,您將可以在獎勵商店購買水晶頭盔。作為貢獻的獎勵,您也將獲得3顆鑽石。", + "eliteFourth": "當您第四度申請貢獻獎勵後,您將可以在獎勵商店購買水晶冰劍。作為貢獻的獎勵,您也將獲得4顆鑽石。", + "champion": "王者", + "championFifth": "當您第五度申請貢獻獎勵後,您將可以在獎勵商店購買水晶護盾。作為貢獻的獎勵,您也將獲得4顆鑽石。", + "championSixth": "當您第六度申請貢獻獎勵後,您將獲得三頭蛇寵物。作為貢獻的獎勵,您也將獲得4顆鑽石。", "legendary": "傳奇", - "legSeventh": "當您第七次意見被採納時,您將得到4顆鑽石、成為榮譽貢獻者公會的一員、並將得知Habitica幕後開發的細節!繼續貢獻將不再提升您的稱號,但是您仍可繼續獲得寶石和頭銜以作回報。", - "moderator": "領袖", - "guardian": "守護者", - "guardianText": "領袖是從高階的貢獻者中仔細挑選出來的,所以請尊重他們,並聽取他們的建議。", - "staff": "職員", + "legSeventh": "當您第七度申請貢獻獎勵後,您將獲得4顆鑽石,並成為榮譽貢獻者公會(Contributor's Guild)的一員,並可獲得 Habitica 開發幕後的詳細內容!後續貢獻將不再提升您的稱號,但您仍可繼續獲得鑽石和頭銜以作回報。", + "moderator": "管理員", + "guardian": "護衛", + "guardianText": "管理員是從高等級貢獻者中仔細挑選而來的,所以請尊重他們,並聽取他們的建議。", + "staff": "工作人員", "heroic": "英雄", - "heroicText": "英雄級別包含了Habitica的工作人員以及與其同位階的貢獻者。如果您有這個頭銜,您將被委任(甚至是被聘請!)。", - "npcText": "NPC 們對 Habitica 的 Kickstarter 計劃作出了最高層級的支持。您可以在網站各處,看到他們的角色形象!", - "modalContribAchievement": "貢獻成就!", - "contribModal": "<%= name %>,您太棒啦! 您現在已成為幫助Habitica的<%= level %>貢獻者。", + "heroicText": "英雄級別包含了 Habitica 的工作人員以及與其同位階的貢獻者。如果您有這個頭銜,您將被委任(甚至是被聘請!)。", + "npcText": "NPC 們對 Habitica 的 Kickstarter 計劃作出了最高級別的贊助。您可以在網站各處,看到他們的角色圖像!", + "modalContribAchievement": "貢獻者成就!", + "contribModal": "<%= name %>,您真是太棒啦! 您現在已成為 Habitica 中的<%= level %>貢獻者。", "contribLink": "快來看看您拿到甚麼酬勞吧!", "contribName": "貢獻者", - "contribText": "為Habitica在程式碼、美術、音樂、寫作、或其他方面作出貢獻。詳情請加入「有理想的傳奇人物公會(Aspiring Legends Guild)」!", + "contribText": "您曾為 Habitica 裡的程式碼、美術、音樂、寫作、或其他方面作出貢獻。詳情請加入「有理想的傳奇人物公會(Aspiring Legends Guild)」!", "readMore": "閱讀更多", - "kickstartName": "Kickstarter 捐助者- $<%= key %>層級", - "kickstartText": "支持了 Kickstarter 項目", - "helped": "幫助了Habitica成長", + "kickstartName": "Kickstarter 贊助者- $<%= key %>層級", + "kickstartText": "支持了 Kickstarter 計畫", + "helped": "幫助了 Habitica 成長", "helpedText1": "為了幫助 Habitica 成長,請填寫", "helpedText2": "這份問卷。", "hall": "英雄殿堂", "contribTitle": "貢獻者頭銜 ( 例如「鐵匠」)", "contribLevel": "貢獻級別", - "contribHallText": "1-7級是正常的貢獻者,8是版主,9是員工。這決定哪些項目,寵物,坐騎和可用。也決定了名字的標籤顏色。8級和9級自動獲得管理狀態。", - "hallContributors": "贊助人殿堂", - "hallPatrons": "贊助人殿堂", + "contribHallText": "1-7級是正常的貢獻者,8是管理員,9是員工。這決定哪些項目,寵物,坐騎和可用。也決定了名字的標籤顏色。8級和9級自動獲得管理狀態。", + "hallContributors": "貢獻者殿堂", + "hallPatrons": "貢獻者殿堂", "rewardUser": "獎勵玩家", - "UUID": "使用者ID", + "UUID": "使用者 ID (UUID)", "loadUser": "載入玩家", "noAdminAccess": "您沒有管理員權限。", "userNotFound": "找不到此用戶。", @@ -56,25 +56,25 @@ "moreDetails2": "更多細節 (8-9)", "contributions": "貢獻", "admin": "管理員", - "notGems": "以美金計算,而鑽石。也就是說,如果數值為 1,便代表 4 顆鑽石。請只在手動授予寶石時使用這個選項。不要在授予貢獻層級的時候使用,因為每個貢獻層級會自動增加鑽石。", + "notGems": "以美金計算,而鑽石。也就是說,如果數值為 1,便代表 4 顆鑽石。請在只想手動發放鑽石時使用此選項。不要在發放貢獻層級時使用,因為貢獻層級會自動發放鑽石。", "gamemaster": "遊戲管理員 ( 職員 / 管理員 )", - "backerTier": "支持者層級", + "backerTier": "贊助者層級", "balance": "結餘", "tierPop": "點擊層級標籤查看細節。", "playerTiers": "玩家層級", "tier": "層級", - "visitHeroes": "前往英雄殿堂(貢獻者和支持者之殿)", - "conLearn": "了解更多貢獻者的獎勵", - "conLearnHow": "了解如何為Habitica作出貢獻", + "visitHeroes": "前往英雄殿堂(包含貢獻者和贊助者)", + "conLearn": "了解更多貢獻者獎勵", + "conLearnHow": "了解如何為 Habitica 作出貢獻", "conLearnURL": "http://habitica.wikia.com/wiki/Contributing_to_Habitica", "conRewardsURL": "http://habitica.wikia.com/wiki/Contributor_Rewards", - "surveysSingle": "可以藉由填寫表單或是進行一些主要的軟體測試來幫助Habitica變得更好。我們由衷地感謝您!", - "surveysMultiple": "已在<%= count %> 場合下幫助過Habitica成長,例如透過填寫調查問卷、或在一次大型測試中提供幫助。我們由衷地感謝您!", + "surveysSingle": "可藉由填寫調查問卷或是進行大型測試來幫助 Habitica 變得更好。我們由衷地感謝您!", + "surveysMultiple": "已在<%= count %>次場合下幫助 Habitica 成長。例如透過填寫調查問卷、或在一次大型測試中提供幫助。我們由衷地感謝您!", "currentSurvey": "目前的調查表", - "surveyWhen": "在三月下旬調查表將處理完畢,徽章將被授予給的所有參與者。", - "blurbInbox": "這是存放您私人訊息的地方!您可以在酒館、隊伍或公會聊天畫面中按下其他使用者名稱旁的信封圖示以私訊給對方。若您收到不當的私人訊息,請附帶截圖寄信給Lemoness (<%= hrefCommunityManagerEmail %>)", - "blurbGuildsPage": "公會是由使用者基於想與共同興趣者聊天所創立的。找尋有趣的公會並加入討論吧!", - "blurbChallenges": "挑戰是由您的同儕夥伴所創立的。參與挑戰將加入一些任務加到你的任務列表中,贏得挑戰將可獲得成就,而且時常帶有鑽石獎勵喔!", - "blurbHallPatrons": " 這裡是贊助名人堂。我們在這裡紀念從草創時期就開始在Kickstarter 上贊助 Habitica 的偉大旅行者們。我們由衷地感謝他們讓 Habitica 正式上架!", - "blurbHallContributors": "這裡是貢獻者殿堂。我們在這裡紀念對開源項目有所貢獻的人們。這包含在程式、美術、音樂、著作方面,或是熱忠於到處幫忙的人都列於其中。他們已經獲得 鑽石、特殊裝備、與尊貴的頭銜。您也可以為 Habitica 做出貢獻!點此來查看詳細資訊。" + "surveyWhen": "在三月下旬調查問卷將被處理完畢,屆時將贈予所有參與者徽章。", + "blurbInbox": "這是存放您私人訊息的地方!您可以在酒館、隊伍或公會聊天畫面中按下其他使用者名稱旁的信封圖示以私訊對方。若您收到不當的私人訊息,請附帶截圖並寄信給 Lemoness (<%= hrefCommunityManagerEmail %>)", + "blurbGuildsPage": "公會是擁有與共同興趣的玩家所所創立的聊天群組。快來尋找對您有興趣的公會並加入他們吧!", + "blurbChallenges": "挑戰是由您的同儕夥伴所創立的。參與挑戰將加入一些任務加到您的任務列表中。贏得挑戰不但可獲得成就,還經常可獲得鑽石獎勵喔!", + "blurbHallPatrons": "這裡是贊助名人堂。我們在這裡紀念從草創時期就開始在 Kickstarter 上贊助 Habitica 的偉大冒險家們。我們由衷地感謝他們幫助讓 Habitica 能正式推出!", + "blurbHallContributors": "這裡是貢獻者殿堂。我們在這裡紀念對開源項目有所貢獻的人們。包含在程式、美術、音樂、著作方面,或是熱忠於到處幫忙的人都列於其中。他們已經獲得 鑽石、特殊裝備、與尊貴的頭銜。您也可以為 Habitica 做出貢獻!點此來查看詳細資訊。" } \ No newline at end of file diff --git a/website/common/locales/zh_TW/death.json b/website/common/locales/zh_TW/death.json index 64cab5a475..d63896a48f 100644 --- a/website/common/locales/zh_TW/death.json +++ b/website/common/locales/zh_TW/death.json @@ -1,17 +1,17 @@ { - "lostAllHealth": "沒有生命值了!", + "lostAllHealth": "您的生命值歸零了!", "dontDespair": "不要絕望!", - "deathPenaltyDetails": "你失去了一個等級、所有金幣和一件裝備,但是只要努力就可以把它們拿回來!", + "deathPenaltyDetails": "您失去了一個等級、所有金幣和一件裝備,但是只要再努力一定可以把它們拿回來!加油,您會變得更好的。", "refillHealthTryAgain": "回復生命值,然後再試一次", - "dyingOftenTips": "這常常發生嗎? 這裡有些密技!", - "losingHealthWarning": "小心!你的生命值正在減少!", - "losingHealthWarning2": "別讓你的生命值降為零!你會因此損失一個等級、所有金幣和一件裝備。", + "dyingOftenTips": "經常缺乏生命值? 這裡有些密技!", + "losingHealthWarning": "小心!您的生命值正在減少!", + "losingHealthWarning2": "別讓您的生命值歸零!您將會因此損失一個等級、所有金幣和一件裝備。", "toRegainHealth": "若要回復生命值:", - "lowHealthTips1": "等級提升而補足生命值!", + "lowHealthTips1": "等級提升能將生命值補滿!", "lowHealthTips2": "從獎勵欄內購買治療藥水可以回復 15 點生命值。", - "losingHealthQuickly": "太容易失去生命值嗎?", - "lowHealthTips3": "未完成的每日任務會在隔天造成損害,所以要小心,不要一開始就增加太多每日任務!", - "lowHealthTips4": "如果你的每日任務在某些日子不用完成的話,你可以點選鉛筆按鈕去更改它。", + "losingHealthQuickly": "失去生命值的速度太快嗎?", + "lowHealthTips3": "未完成的每日任務將在隔天對您造成傷害,所以要小心不要一開始就增加太多每日任務!", + "lowHealthTips4": "如果您的每日任務不須在某些日子完成的話,您可以點擊鉛筆按鈕去更改它。", "goodLuck": "祝你好運!", - "cannotRevive": "不能在還沒死亡的時候復活。" + "cannotRevive": "無法在尚未死亡時復活。" } \ No newline at end of file diff --git a/website/common/locales/zh_TW/defaulttasks.json b/website/common/locales/zh_TW/defaulttasks.json index a713e3568b..836b8b0997 100644 --- a/website/common/locales/zh_TW/defaulttasks.json +++ b/website/common/locales/zh_TW/defaulttasks.json @@ -1,28 +1,28 @@ { "defaultHabit1Text": "高效率的作業 (點選鉛筆圖案進行編輯)", - "defaultHabit1Notes": "好習慣 (例子):+吃蔬菜 +15分鐘的高效率作業", + "defaultHabit1Notes": "好習慣例子:+吃蔬果 +15分鐘的高效率作業", "defaultHabit2Text": "吃零食 (點選鉛筆圖案進行編輯)", - "defaultHabit2Notes": "壞習慣 (例子):- 抽菸 - 拖延", - "defaultHabit3Text": "爬樓梯/ 搭電梯 (點選鉛筆圖案進行編輯)", + "defaultHabit2Notes": "壞習慣 (例子):- 抽菸 - 怠慢", + "defaultHabit3Text": "爬樓梯/搭電梯 (點選鉛筆圖案進行編輯)", "defaultHabit3Notes": "一些好或壞的習慣:+/- 搭電梯或走樓梯 ; +/- 喝水或喝汽水", "defaultHabit4Text": "添加一個任務到Habitica裡", "defaultHabit4Notes": "不論是一個習慣或是每日任務亦或是待辦事項", "defaultHabit5Text": "點擊這裡來將它編輯為一個您想戒掉的壞習慣", - "defaultHabit5Notes": "或者在編輯界面刪除", - "defaultDaily1Text": "用Habitica來追蹤您的任務", - "defaultTodo1Text": "加入 Habitica ( 完成我!)", - "defaultTodoNotes": "你可以完成這個事項,編輯它或刪除它。", - "defaultTodo2Text": "完成參訪Justin的任務", - "defaultTodo2Notes": "查看過所有在底部的功能鍵", + "defaultHabit5Notes": "或者在編輯界面中刪除", + "defaultDaily1Text": "用 Habitica 來追蹤您的任務進度", + "defaultTodo1Text": "加入 Habitica ( 幫我勾選掉!)", + "defaultTodoNotes": "您可以完成此待辦事項、編輯它、或刪除它。", + "defaultTodo2Text": "完成 Justin 的任務參訪", + "defaultTodo2Notes": "查看過所有底部的功能鍵", "defaultReward1Text": "休息15分鐘", - "defaultReward1Notes": "自定獎勵可以是任何形式。有些人除非花金幣購買,才可以看喜歡的電視節目。", + "defaultReward1Notes": "自定獎勵可以是任何形式。有些人除非有足夠的金幣可以購買,否則不准自己看喜歡的電視節目。", "defaultReward2Text": "獎勵自己", - "defaultReward2Notes": "看電視,玩游戲,吃零食,全都取決於你!", + "defaultReward2Notes": "看電視,玩游戲,吃零食,全都取決於您!", "defaultTag1": "工作", "defaultTag2": "運動", - "defaultTag3": "健康", + "defaultTag3": "健康與保健", "defaultTag4": "學校", "defaultTag5": "團隊", - "defaultTag6": "瑣事", + "defaultTag6": "雜務", "defaultTag7": "創意" } \ No newline at end of file diff --git a/website/common/locales/zh_TW/faq.json b/website/common/locales/zh_TW/faq.json index d8a5478f9e..b436469ad6 100644 --- a/website/common/locales/zh_TW/faq.json +++ b/website/common/locales/zh_TW/faq.json @@ -41,8 +41,8 @@ "androidFaqAnswer9": "首先,您需要先加入或是建立一個隊伍(上面已有相關說明)。當然您也可以獨自一人對抗魔王,但我們還是推薦您加入一個隊伍,因為多點人會對抗魔王會輕鬆許多,而且在完成任務時有一些朋友會來讚賞您,這是非常激勵人心的!\n\n接著,您需要一卷副本卷軸,它會被存在「選單」>「物品」裡面。您有三種方式可以獲得卷軸: \n\n-當您15等時,您會取得一組系列副本,裡面包含三個副本。當您分別達到30等、40等、60等的時候,您可再解鎖更多的系列副本。 \n-當您邀請別人進入您的隊伍,您將得到一卷名為「清單巨蟒」的副本卷軸做為獎勵。\n-您也可以副本商城裡,用金幣或鑽石購買副本卷軸。\n\n一般情況下,副本卷軸的任務將會是與魔王決鬥或者是收集特定物品。您只需要正常地完成您的任務,隔天系統就會自動將完成的任務的轉換成傷害攻擊魔王。(您可能需要由上往下拉以重新整理,這時就會看到魔王的血量下降了。)如果您在與魔王決鬥時沒做完全部的每日任務,那麼在您攻擊魔王的同時魔王也將會攻擊您所有的隊員哦!\n\n在11等之後,戰士和法師將得到可對魔王造成額外傷害的職業技能。所以如果您想成為一位高輸出的角色且剛好滿10等了,這兩種職業將會是您最好的選擇!", "webFaqAnswer9": "首先,您需要先加入或是在導覽列上點選「隊伍」並建立一個隊伍。當然您也可以獨自一人對抗魔王,但我們還是推薦您加入一個隊伍,因為多點人會對抗魔王會輕鬆許多,而且在完成任務時有一些朋友會來讚賞您,這是非常激勵人心的!接著,您需要一卷副本卷軸,它們都被存在「背包」>「物品」>「副本」裡面。您有四種方式可以獲得副本: \n*當您邀請別人進入您的隊伍,您將得到一卷名為「清單巨蟒」的副本卷軸做為獎勵。\n*當您15等時,您將會取得一組系列副本,裡面包含三個副本。當您分別達到30等、40等、60等時,還可再解鎖更多的系列副本。 \n*您也可以在副本商城(「商店」>「副本」)花費金幣或鑽石購買副本卷軸。\n*當您登入Habitica累積滿一定天數後,您也可得到副本卷軸以茲鼓勵。您將在第1、7、22、40次時分別得到不一樣的副本。\n一般情況下,副本卷軸的內容將會是與魔王決鬥或者是收集特定物品。您只需要正常地完成您的任務,隔天系統就會自動將完成的任務的轉換成傷害攻擊魔王。(您可能需要由上往下拉以重新整理,這時就會看到魔王的血量下降了。)如果您在與魔王決鬥時沒做完全部的每日任務,那麼在您攻擊魔王的同時魔王也將會攻擊您所有的隊員哦!\n在11等之後,戰士和法師將得到可對魔王造成額外傷害的職業技能。所以如果您想成為一位高輸出的角色且剛好滿10等了,這兩種職業將會是您最好的選擇!", "faqQuestion10": "鑽石是什麼?我要怎麼得到呢?", - "iosFaqAnswer10": "鑽石需要透過點擊導覽列上的寶石圖示後並花費真錢才能購買。當您購買鑽石的同時,您也正幫助了我們維持網站的營運。我們由衷地感謝您的支持!\n\n除了直接利用現金購買鑽石外,還有三種其他的方式可以獲取鑽石:\n*在別人設立好的挑戰中贏得勝利 。您可以到「社交」>「挑戰」裡加入一些挑戰。\n*訂閱我們,這樣就能每個月用遊戲金幣購買一定數量的鑽石。\n*為Habitica作出貢獻,可查看wiki頁面以獲得詳細資訊:[幫助Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)。\n\n注意! 購買鑽石將不會得到額外的優勢。所以就算您沒有任何的鑽石,還是可以開心順利地使用Habitica哦!", - "androidFaqAnswer10": "鑽石需要透過點擊導覽列上的鑽石圖示後並花費真錢才能購買。當您購買鑽石的同時,您也正幫助了我們維持網站的營運。我們由衷地感謝您的支持!\n\n除了直接利用現金購買寶石外,還有三種其他的方式可以獲取鑽石:\n*在別人設立好的挑戰中贏得勝利 。您可以到「社交」>「挑戰」裡加入一些挑戰。\n*訂閱我們,這樣就能每個月用遊戲金幣購買一定數量的鑽石。\n*為Habitica作出貢獻,可查看wiki頁面以獲得詳細資訊:[幫助Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)。\n\n注意! 購買鑽石將不會得到額外的優勢。所以就算您沒有任何的鑽石,還是可以開心順利地使用Habitica哦!", + "iosFaqAnswer10": "鑽石需要透過點擊導覽列上的鑽石圖示後並花費真錢才能購買。當您購買鑽石的同時,您也正幫助了我們維持網站的營運。我們由衷地感謝您的支持!\n\n除了直接利用現金購買鑽石外,還有三種其他的方式可以獲取鑽石:\n*在別人設立好的挑戰中贏得勝利 。您可以到「社交」>「挑戰」裡加入一些挑戰。\n*訂閱我們,這樣就能每個月用遊戲金幣購買一定數量的鑽石。\n*為Habitica作出貢獻,可查看wiki頁面以獲得詳細資訊:[幫助Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)。\n\n注意! 購買鑽石將不會得到額外的優勢。所以就算您沒有任何的鑽石,還是可以開心順利地使用Habitica哦!", + "androidFaqAnswer10": "鑽石需要透過點擊導覽列上的鑽石圖示後並花費真錢才能購買。當您購買鑽石的同時,您也正幫助了我們維持網站的營運。我們由衷地感謝您的支持!\n\n除了直接利用現金購買鑽石外,還有三種其他的方式可以獲取鑽石:\n*在別人設立好的挑戰中贏得勝利 。您可以到「社交」>「挑戰」裡加入一些挑戰。\n*訂閱我們,這樣就能每個月用遊戲金幣購買一定數量的鑽石。\n*為Habitica作出貢獻,可查看wiki頁面以獲得詳細資訊:[幫助Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)。\n\n注意! 購買鑽石將不會得到額外的優勢。所以就算您沒有任何的鑽石,還是可以開心順利地使用Habitica哦!", "webFaqAnswer10": "鑽石需要花費真錢才能購買。但是[訂閱者](https://habitica.com/user/settings/subscription)可以花費遊戲金幣購買它們。當您訂閱我們或是購買鑽石的同時,您也正幫助了我們維持網站的營運。我們由衷地感謝您的支持!除了直接利用現金購買鑽石外,還有兩種其他的方式可以獲取鑽石:\n*在別人設立好的挑戰中贏得勝利 。可以到「社交」>「挑戰」裡加入一些挑戰。\n*為Habitica作出貢獻,可查看wiki頁面以獲得詳細資訊:[幫助Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)。注意! 購買鑽石將不會得到額外的優勢。所以就算您沒有任何的鑽石,還是可以開心順利地使用Habitica哦!", "faqQuestion11": "我要怎麼做才能回報問題或者建議新功能呢?", "iosFaqAnswer11": "您可以到「選單」>「關於」>「提交Bug」或是「提交反饋」裡回報錯誤、建議新功能或者是提供意見。我們將盡其所能的協助您!", diff --git a/website/common/locales/zh_TW/front.json b/website/common/locales/zh_TW/front.json index 98f178d340..f3c13ca737 100644 --- a/website/common/locales/zh_TW/front.json +++ b/website/common/locales/zh_TW/front.json @@ -1,7 +1,7 @@ { "FAQ": "常見問題", - "termsAndAgreement": "點擊下面的按鈕,表示您已經閱讀並同意服務條款隱私權政策。", - "accept1Terms": "當按下下面按鈕時,表示我同意", + "termsAndAgreement": "當您點擊下方按鈕,代表您已經閱讀並同意服務條款隱私權政策。", + "accept1Terms": "當點擊下方按鈕時,但表我已同意", "accept2Terms": "以及", "alexandraQuote": "當我在馬德里發表演說時,我真的不得不提到 Habitica 帶來的好處。如果您是一位需要老闆來管理自己的自由工作者,您絕對需要它!", "althaireQuote": "持續地去完成副本真的能激勵我完成所有的每日工作和待辦事項。我最大的動力就是不辜負我的隊員們。", @@ -271,8 +271,8 @@ "emailTaken": "該電子郵件已經被其他帳戶使用。", "newEmailRequired": "尚未輸入新電子郵件地址。", "usernameTime": "是時候來設定您的使用者名稱了!", - "usernameInfo": "Login names are now unique usernames that will be visible beside your display name and used for invitations, chat @mentions, and messaging.

If you'd like to learn more about this change, visit our wiki.", - "usernameTOSRequirements": "Usernames must conform to our Terms of Service and Community Guidelines. If you didn’t previously set a login name, your username was auto-generated.", + "usernameInfo": "登入名稱現在是獨一無二的名稱,顯示於暱稱旁邊。它將用於邀請、聊天 @標記,和發訊息。

如果您想要知道更多關於這項改變,可以查看我們的 wiki。", + "usernameTOSRequirements": "使用者名稱必須遵守我們的服務條款社群守則。如果您之前尚未設立登入名稱,您的使用者名稱將會被自動產生。", "usernameTaken": "此使用者名稱已有人使用。", "passwordConfirmationMatch": "密碼不匹配。", "invalidLoginCredentials": "錯誤的使用者名稱 和(或) 電子郵件 和(或) 密碼。", @@ -328,7 +328,7 @@ "joinMany": "和超過2,000,000個人一起享受完成目標的快感!", "joinToday": "現在就想加入Habitica!", "signup": "註冊", - "getStarted": "Get Started!", + "getStarted": "開始吧! ", "mobileApps": "行動版APP", "learnMore": "了解更多" } \ No newline at end of file diff --git a/website/common/locales/zh_TW/gear.json b/website/common/locales/zh_TW/gear.json index c910abe3cd..1a7db9b4ee 100644 --- a/website/common/locales/zh_TW/gear.json +++ b/website/common/locales/zh_TW/gear.json @@ -88,7 +88,7 @@ "weaponSpecial3Notes": "(Mustaine's Milestone Mashing Morning Star) 看到怪物統統搗爛!增加力量、智力、體質各 <%= attrs %> 點。", "weaponSpecialCriticalText": "碾蟲大師強力戰鎚", "weaponSpecialCriticalNotes": "這位勇者殺死了一個讓無數戰士殞落的 Gitthub敵人。這把戰鎚由臭蟲的骨頭打造,能給敵人帶來強大的致命一擊。增加力量、感知各 <%= attrs %>點。", - "weaponSpecialTakeThisText": "收下這把劍", + "weaponSpecialTakeThisText": "Take This 劍", "weaponSpecialTakeThisNotes": "這把劍只有參與過由 \"Take This\" 贊助的挑戰才可獲得! 恭喜您! 增加所有屬性各 <%= attrs %> 點。", "weaponSpecialTridentOfCrashingTidesText": "怒潮三叉戟", "weaponSpecialTridentOfCrashingTidesNotes": "賜予您指揮魚群的力量,再給您擊潰任務的強大觸針。增加 <%= int %> 點智力。", @@ -412,7 +412,7 @@ "armorSpecial1Notes": "它永垂不朽的力量讓穿戴者漸漸習慣了單調的痛苦。增加所有屬性各 <%= attrs %> 點。", "armorSpecial2Text": "設計大師的典雅束腰外衣", "armorSpecial2Notes": "由Jean Chalard親自操刀設計的束腰外衣。讓您看起來更加格外蓬鬆!增加體質、智力各 <%= attrs %> 點。", - "armorSpecialTakeThisText": "收下這套鎧甲", + "armorSpecialTakeThisText": "Take This 鎧甲", "armorSpecialTakeThisNotes": "這套鎧甲只有參加過由 \"Take This\" 贊助的挑戰才可獲得! 恭喜您! 增加所有屬性各 <%= attrs %> 點。", "armorSpecialFinnedOceanicArmorText": "魚鰭海洋護甲", "armorSpecialFinnedOceanicArmorNotes": "雖然看起來很精緻,但這件鎧甲會讓您變得像火紅珊瑚一樣碰不得哦。增加 <%= str %> 點力量。", @@ -440,8 +440,8 @@ "armorSpecialSamuraiArmorNotes": "這件鎧甲是由成千上萬個堅硬的鎖鏈組成,並用極為講究的高級絲線所串起來。增加 <%= per %> 點感知。", "armorSpecialTurkeyArmorBaseText": "火雞鎧甲", "armorSpecialTurkeyArmorBaseNotes": "穿上這套毛茸茸的鎧甲就能讓您的小腿感到溫暖舒適! 無屬性加成。", - "armorSpecialTurkeyArmorGildedText": "Gilded Turkey Armor", - "armorSpecialTurkeyArmorGildedNotes": "Strut your stuff in this seasonally shiny armor! Confers no benefit.", + "armorSpecialTurkeyArmorGildedText": "鍍金火雞鎧甲", + "armorSpecialTurkeyArmorGildedNotes": "將您的東西通通塞進這件歡慶的閃亮亮鎧甲! 無屬性加成。", "armorSpecialYetiText": "雪怪馴化師長袍", "armorSpecialYetiNotes": "毛茸茸而且非常地兇猛! 增加 <%= con %> 點體質。2013-2014冬季限定版裝備", "armorSpecialSkiText": "滑雪刺客毛皮外套", @@ -686,8 +686,8 @@ "armorMystery201808Notes": "這副鎧甲是以難以捉摸(而且非常燙)的熔岩巨龍身上的蛻皮製作而成。無屬性加成。 2018年8月訂閱者專屬裝備", "armorMystery201809Text": "秋葉鎧甲", "armorMystery201809Notes": "您不僅是一片既微小又令人恐懼的葉片,您也正在炫耀這個季節裡最美麗的顏色。無屬性加成。 2018年9月訂閱者專屬裝備", - "armorMystery201810Text": "Dark Forest Robes", - "armorMystery201810Notes": "These robes are extra warm to protect you from the ghastly cold of haunted realms. Confers no benefit. October 2018 Subscriber Item.", + "armorMystery201810Text": "黑暗森林長袍", + "armorMystery201810Notes": "這件長袍穿起來非常溫暖,能抵擋來自幽靈王國傳來的陰森森寒冷氣息。無屬性加成。 2018年10月訂閱者專屬裝備", "armorMystery301404Text": "蒸汽龐克風套裝", "armorMystery301404Notes": "精巧又瀟灑,哇嗚! 無屬性加成。 3015年2月訂閱者專屬裝備", "armorMystery301703Text": "蒸汽龐克風孔雀禮服", @@ -786,8 +786,8 @@ "armorArmoireCoverallsOfBookbindingNotes": "您需要的所有工具都裝在這件工作服的口袋裡。護目鏡、零錢、金戒指... 樣樣齊全。增加 <%= con %> 點體質和 <%= per %> 點感知。 來自神秘寶箱: 圖書裝訂工套裝(2/4)", "armorArmoireRobeOfSpadesText": "黑桃長袍", "armorArmoireRobeOfSpadesNotes": "這件高貴的長袍藏有能容納所有寶藏或武器的隱藏口袋 - 一切由您決定! 增加 <%= str %> 點力量。 來自神祕寶箱: 黑桃長矛套裝(2/3)", - "armorArmoireSoftBlueSuitText": "Soft Blue Suit", - "armorArmoireSoftBlueSuitNotes": "Blue is a calming colour. So calming, some even wear this soft outfit to sleep... zZz. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Blue Loungewear Set (Item 2 of 3).", + "armorArmoireSoftBlueSuitText": "柔軟藍西裝", + "armorArmoireSoftBlueSuitNotes": "藍色是一個能使人平靜的顏色。太過於平靜以至於有人甚至穿著這件柔軟的服裝去睡覺。zZz。增加 <%= int %> 點智力和 <%= per %> 點感知。 來自神祕寶箱: 淺藍便服套裝(2/3)", "headgear": "頭盔", "headgearCapitalized": "頭盔", "headBase0Text": "沒有頭盔", @@ -838,7 +838,7 @@ "headSpecial1Notes": "那些以身作則的人最想得到的皇冠。增加所有屬性各 <%= attrs %> 點。", "headSpecial2Text": "無名頭盔", "headSpecial2Notes": "不求回報的人對自己許下的誓約。增加智力、力量各 <%= attrs %> 點。", - "headSpecialTakeThisText": "收下這頂頭盔", + "headSpecialTakeThisText": "Take This 頭盔", "headSpecialTakeThisNotes": "這頂頭盔只有參與過由 \"Take This\" 贊助的挑戰才可獲得! 恭喜您! 增加所有屬性各 <%= attrs %> 點。", "headSpecialFireCoralCircletText": "火珊瑚飾環", "headSpecialFireCoralCircletNotes": "這副頭飾是由Habitica中最厲害的煉金術師所操刀設計的。可以讓您在水中呼吸和潛水尋寶! 增加 <%= per %> 點感知。", @@ -868,8 +868,8 @@ "headSpecialNamingDay2017Notes": "命名節快樂! 快戴上這頂由兇猛獅鷲的羽毛編製而成的頭盔一同前來為 Habitica 歡慶吧! 無屬性加成。", "headSpecialTurkeyHelmBaseText": "火雞頭盔", "headSpecialTurkeyHelmBaseNotes": "唯有戴上這頂鳥嘴狀的頭盔,您的火雞Cosplay才算完整喔! 無屬性加成。", - "headSpecialTurkeyHelmGildedText": "Gilded Turkey Helm", - "headSpecialTurkeyHelmGildedNotes": "Gobble gobble! Bling bling! Confers no benefit.", + "headSpecialTurkeyHelmGildedText": "鍍金火雞頭盔", + "headSpecialTurkeyHelmGildedNotes": "咯咯咯! 叮呤叮呤! 無屬性加成。", "headSpecialNyeText": "滑稽派對帽", "headSpecialNyeNotes": "恭喜您收到一頂滑稽的派對慶生帽! 當新年鐘聲響起時,就自豪地戴上它吧! 無屬性加成。", "headSpecialYetiText": "雪怪馴化師頭盔", @@ -1118,8 +1118,8 @@ "headMystery201808Notes": "披風上那閃閃發亮的龍角能夠在地底的洞穴中照亮您的路。無屬性加成。 2018年8月訂閱者專屬裝備", "headMystery201809Text": "秋季花朵皇冠", "headMystery201809Notes": "來自秋季溫暖日子中的最後一朵花正是紀念此季節中的美麗事物之最佳信物。無屬性加成。 2018年9月訂閱者專屬裝備", - "headMystery201810Text": "Dark Forest Helm", - "headMystery201810Notes": "If you find yourself traveling through a spooky place, the glowing red eyes of this helm will surely scare away any enemies in your path. Confers no benefit. October 2018 Subscriber Item.", + "headMystery201810Text": "黑暗森林頭盔", + "headMystery201810Notes": "如果您正在穿越一個幽靈般的地方,這頂頭盔上發紅光的眼睛一定能嚇跑沿路中的敵人。無屬性加成。 2018年10月訂閱者專屬裝備", "headMystery301404Text": "華麗高頂禮帽", "headMystery301404Notes": "上流社會佼佼者的華麗高頂禮帽! 無屬性加成。 3015年1月訂閱者專屬裝備", "headMystery301405Text": "基礎高頂禮帽", @@ -1156,8 +1156,8 @@ "headArmoireBlackCatNotes": "這頂黑帽正在...打鼾,還甩動尾巴並深呼吸? 沒錯,在您頭上的正是一隻正在睡覺的貓。增加智力、感知各 <%= attrs %> 點。 來自神祕寶箱: 獨立裝備", "headArmoireOrangeCatText": "橘貓帽", "headArmoireOrangeCatNotes": "這頂橘帽正在...打鼾,還甩動尾巴並深呼吸? 沒錯,在您頭上的正是一隻正在睡覺的貓。增加力量、體質各 <%= attrs %> 點。 來自神祕寶箱: 獨立裝備", - "headArmoireBlueFloppyHatText": "水藍寬簷帽", - "headArmoireBlueFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a brilliant blue color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Blue Loungewear Set (Item 1 of 3).", + "headArmoireBlueFloppyHatText": "淺藍寬簷軟帽", + "headArmoireBlueFloppyHatNotes": "這頂帽子是由許多許法術編織而成的,讓它呈現一種閃亮光輝的藍色。增加體質、智力、感知各 <%= attrs %> 點。 來自神祕寶箱: 淺藍便服套裝(1/3)", "headArmoireShepherdHeaddressText": "牧羊人頭飾", "headArmoireShepherdHeaddressNotes": "你戴上這頂頭飾能讓您顯得智力非凡,不過您放養的獅鷲無聊時喜歡咀嚼它。增加 <%= int %> 點智力。 來自神秘寶箱: 牧羊人套裝(3/3)", "headArmoireCrystalCrescentHatText": "弦月水晶帽", @@ -1254,7 +1254,7 @@ "shieldSpecial0Notes": "看透死亡的面紗,以陰間的慘象使敵人顫抖。增加 <%= per %> 點感知。", "shieldSpecial1Text": "水晶護盾", "shieldSpecial1Notes": "能夠粉碎弓箭並折射反對者施加的咒語。增加所有屬性各 <%= attrs %> 點。", - "shieldSpecialTakeThisText": "收下這面盾牌", + "shieldSpecialTakeThisText": "Take This 盾牌", "shieldSpecialTakeThisNotes": "這面盾牌只有參與過由 \"Take This\" 贊助的挑戰才可獲得! 恭喜您! 增加所有屬性各 <%= attrs %> 點。", "shieldSpecialGoldenknightText": "馬斯泰恩的碎石流星錘", "shieldSpecialGoldenknightNotes": "(Mustaine's Milestone Mashing Morning Star) 看到怪物統統搗爛!增加體質、感知各 <%= attrs %> 點。", @@ -1450,8 +1450,8 @@ "shieldArmoirePiraticalSkullShieldNotes": "這面附魔過的護盾將能竊聽敵人寶藏的藏匿點。請仔細聆聽! 增加感知、智力各 <%= attrs %> 點。 來自神秘寶箱: 海盜公主套裝(4/4)", "shieldArmoireUnfinishedTomeText": "未完成的巨著", "shieldArmoireUnfinishedTomeNotes": "當您持有這本書時,您完全無法怠慢! 因為這本書的裝訂需要盡快被完成,才能讓大家讀這本書! 增加 <%= int %> 點致力。 來自神秘寶箱: 圖書裝訂工套裝(4/4)", - "shieldArmoireSoftBluePillowText": "Soft Blue Pillow", - "shieldArmoireSoftBluePillowNotes": "The sensible warrior packs a pillow for any expedition. Shield yourself from sharp tasks... even while you nap. Increases Constitution by <%= con %>. Enchanted Armoire: Blue Loungewear Set (Item 3 of 3).", + "shieldArmoireSoftBluePillowText": "柔軟藍枕頭", + "shieldArmoireSoftBluePillowNotes": "明智的戰士都會在遠征時多準備一個枕頭。可以保護自己免於被鋒利的任務傷害...甚至是您正在小睡的時候。增加 <%= con %> 點體質。 來自神祕寶箱: 淺藍便服套裝(3/3)", "back": "後背配件", "backCapitalized": "後背配件", "backBase0Text": "沒有後背配件", @@ -1501,20 +1501,20 @@ "backSpecialAetherCloakNotes": "這件斗篷曾屬於迷失的職業統治大師(Lost Masterclasser)。增加 <%= per %> 點感知。", "backSpecialTurkeyTailBaseText": "火雞尾巴", "backSpecialTurkeyTailBaseNotes": "在慶祝時別忘了穿上這條高尚的火雞尾巴! 無屬性加成。", - "backSpecialTurkeyTailGildedText": "Gilded Turkey Tail", - "backSpecialTurkeyTailGildedNotes": "Plumage fit for a parade! Confers no benefit.", + "backSpecialTurkeyTailGildedText": "鍍金火雞尾巴", + "backSpecialTurkeyTailGildedNotes": "這團羽毛最適合拿來遊行了!無屬性加成。", "backBearTailText": "猛熊尾巴", "backBearTailNotes": "這條尾巴能讓您看起來就像是一隻英勇的熊! 無屬性加成。", "backCactusTailText": "仙人掌尾巴", - "backCactusTailNotes": "這條尾巴能讓您看起來就像是一株多刺的仙人掌! 無屬性加成。", + "backCactusTailNotes": "這條尾巴能讓您看起來就像是一株刺手的仙人掌! 無屬性加成。", "backFoxTailText": "狐狸尾巴", - "backFoxTailNotes": "這條尾巴能讓您看起來就像是一隻詭計多端的狐狸! 無屬性加成。", + "backFoxTailNotes": "這條尾巴能讓您看起來就像是一隻狡詐的狐狸! 無屬性加成。", "backLionTailText": "獅子尾巴", "backLionTailNotes": "這條尾巴能讓您看起來就像是一隻萬獸之王的獅子! 無屬性加成。", "backPandaTailText": "貓熊尾巴", "backPandaTailNotes": "這條尾巴能讓您看起來就像是一隻溫和的貓熊! 無屬性加成。", "backPigTailText": "小豬尾巴", - "backPigTailNotes": "這條尾巴能讓您看起來就像是一隻異想天開的小豬! 無屬性加成。", + "backPigTailNotes": "這條尾巴能讓您看起來就像是一隻怪誕的飛豬! 無屬性加成。", "backTigerTailText": "老虎尾巴", "backTigerTailNotes": "這條尾巴能讓您看起來就像是一隻兇猛的老虎! 無屬性加成。", "backWolfTailText": "灰狼尾巴", @@ -1596,15 +1596,15 @@ "headAccessoryBearEarsText": "猛熊耳朵", "headAccessoryBearEarsNotes": "這雙耳朵能讓您看起來就像是一隻英勇的熊! 無屬性加成。", "headAccessoryCactusEarsText": "仙人掌耳朵", - "headAccessoryCactusEarsNotes": "這雙耳朵能讓您看起來就像是一隻多刺的仙人掌! 無屬性加成。", + "headAccessoryCactusEarsNotes": "這雙耳朵能讓您看起來就像是一株刺手的仙人掌! 無屬性加成。", "headAccessoryFoxEarsText": "狐狸耳朵", - "headAccessoryFoxEarsNotes": "這雙耳朵能讓您看起來就像是一隻詭計多端的狐狸! 無屬性加成。", + "headAccessoryFoxEarsNotes": "這雙耳朵能讓您看起來就像是一隻狡詐的狐狸! 無屬性加成。", "headAccessoryLionEarsText": "獅子耳朵", "headAccessoryLionEarsNotes": "這雙耳朵能讓您看起來就像是一隻萬獸之王的獅子! 無屬性加成。", "headAccessoryPandaEarsText": "貓熊耳朵", "headAccessoryPandaEarsNotes": "這雙耳朵能讓您看起來就像是一隻溫和的貓熊! 無屬性加成。", "headAccessoryPigEarsText": "小豬耳朵", - "headAccessoryPigEarsNotes": "這雙耳朵能讓您看起來就像是一隻異想天開的小豬! 無屬性加成。", + "headAccessoryPigEarsNotes": "這雙耳朵能讓您看起來就像是一隻怪誕的小飛豬! 無屬性加成。", "headAccessoryTigerEarsText": "老虎耳朵", "headAccessoryTigerEarsNotes": "這雙耳朵能讓您看起來就像是一隻兇猛的老虎! 無屬性加成。", "headAccessoryWolfEarsText": "灰狼耳朵", diff --git a/website/common/locales/zh_TW/npc.json b/website/common/locales/zh_TW/npc.json index 08c97bccb8..ff2e3a4341 100644 --- a/website/common/locales/zh_TW/npc.json +++ b/website/common/locales/zh_TW/npc.json @@ -1,7 +1,7 @@ { "npc": "NPC", "npcAchievementName": "<%= key %> NPC", - "npcAchievementText": "支持了最高等級的Kickstarter項目!", + "npcAchievementText": "對 Kickstarter 計劃作出了最高級別的贊助!", "welcomeTo": "歡迎來到", "welcomeBack": "歡迎回來!", "justin": "Justin", diff --git a/website/common/locales/zh_TW/quests.json b/website/common/locales/zh_TW/quests.json index 0746cb1781..d433fa7312 100644 --- a/website/common/locales/zh_TW/quests.json +++ b/website/common/locales/zh_TW/quests.json @@ -38,7 +38,7 @@ "questCollection": "+ <%= val %> 個副本道具被找到。", "questDamage": "+ <%= val %> 點傷害給魔王。", "begin": "開始", - "bossHP": "魔王的生命值", + "bossHP": "魔王生命值", "bossStrength": "魔王的力量", "rage": "憤怒值", "collect": "收集", From 8db6c8bd4fd1a537112456b923373e327f6a7590 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Mon, 26 Nov 2018 19:09:42 +0000 Subject: [PATCH 42/42] 4.73.2 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3bb71b84f5..5cc182c2fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "4.73.1", + "version": "4.73.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 8228e7d3a6..7f02af1745 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "4.73.1", + "version": "4.73.2", "main": "./website/server/index.js", "dependencies": { "@slack/client": "^3.8.1",