<?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the
 * installation. You don't have to use the web site, you can
 * copy this file to "wp-config.php" and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * MySQL settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://codex.wordpress.org/Editing_wp-config.php
 *
 * @package WordPress
 */

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'fernsc5_wp_btyel' );

/** MySQL database username */
define( 'DB_USER', 'fernsc5_wp_pwole' );

/** MySQL database password */
define( 'DB_PASSWORD', 't2#A0DC~w1^dkWrF' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost:3306' );

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

/**
 * Authentication Unique Keys and Salts.
 *
 * Change these to different unique phrases!
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define('AUTH_KEY', 'm~]6q-!4~jN]N#3woT2k5CHX4*WsNG09s3g2(47Ee5B|3M8f6nDp8FNZo54m_oC8');
define('SECURE_AUTH_KEY', '|y50Kl7-2~8x9!&x0hOOC9_uA7YZ(&4)_Pe44z3/8:*#nc7Bkj|oE9i/q3(6Kx~_');
define('LOGGED_IN_KEY', 'IZD;h4:6Lo5*24#G43r#RC-9u0B7T33f4*56R2]&v8*w5w5SfrL*:z:|68v4kc*;');
define('NONCE_KEY', '[9R40](9C68G_ol4Wq2&gQ(9&+-XCu*&Hr9b6W!N(o03q4v3v5WE2x+/Y[W0sn+h');
define('AUTH_SALT', 'Dlg3vT+q-O2@V4Dj~kD+)-J7|1C5ZTSq-JK%:rjHK186E#58y)8Ds284evoub39(');
define('SECURE_AUTH_SALT', '9z&@2*]65dAh807)30Wh5Nx%0]s:0l3%XLl3%|d0hdDi9l4Vzx3-0_MOO7mI4sd4');
define('LOGGED_IN_SALT', '5_A27B+oF0v8@|s)5CGvp5xIaG35Z~91k!|)05N*0K3dZc9]v5QId_!_e@n97#4-');
define('NONCE_SALT', 'n92c96284_/n3[7-Xtu#Ib6B619nJS@:zP]Q*312]Pta~dV1V9j#p)N|@Yzex(7*');

/**
 * WordPress Database Table prefix.
 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 */
$table_prefix = 'lqjH4wu_';


define('WP_ALLOW_MULTISITE', true);
/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
	define( 'ABSPATH', dirname( __FILE__ ) . '/' );
}

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';
