diff --git a/.cliffignore b/.cliffignore new file mode 100644 index 000000000..187668fd1 --- /dev/null +++ b/.cliffignore @@ -0,0 +1,7 @@ +9766c534bddad8e82e6d19f9bad5cf70b9887f9a +92ce77ec0ec703c08a659419087a373f76e711f7 +2d53efc945c7747be1755d0b66557a86bdc12cbd +602137b65129b817811b80975a369ebde3270c6d +4eb26ae37e1f4c82a45961517ffeb54c20200408 +e59adce848a9e10ee5775254045cbbd915236b8b +9e0a64108d62236ab07b3f8d10e8c78269b8e1d1 diff --git a/.env.example b/.env.example index d9aa2df2a..c0776eda9 100644 --- a/.env.example +++ b/.env.example @@ -1,10 +1,11 @@ # Common params +TP_HOST=example.com +TP_PORT=80 APP_ENV=production APP_CRON_ENABLED=true APP_DEMO_MODE=false # Database credentials -DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=torrentpier diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index b73537336..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..799818d98 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,62 @@ +name: Bug Report +description: File a bug report +title: "[Bug]" +labels: Bug +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + The more detailed this bug report is, the faster it can be reviewed and fixed. + - type: input + id: version-torrentpier + attributes: + label: TorrentPier Version + description: TorrentPier version your using? + placeholder: 2.4.0 + validations: + required: true + - type: input + id: version-php-os + attributes: + label: PHP & Platform + description: Exact PHP and Platform (OS) versions your using. + placeholder: 8.1.2 - Ubuntu 22.04 x64 + validations: + required: true + - type: checkboxes + id: requirements + attributes: + label: Have you done this? + options: + - label: I am willing to share my stack trace and logs + required: true + - label: I can suggest a fix as a Pull Request + required: false + - type: textarea + id: expectation + attributes: + label: Expectation + description: Write what you expect to (correctly) happen. + placeholder: When I do this, I expect to this to happen. + validations: + required: true + - type: textarea + id: description + attributes: + label: Description + description: Write what (incorrectly) happens instead. + placeholder: Instead, when I do this, I receive that. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Stack trace & logs + description: | + If you have a stack trace, you can copy it here. You may hide sensitive information. + Including a stack trace when reporting an error 500 is required. + placeholder: This is automatically formatted into code, no need for backticks. + render: shell + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature---enhancement-request.md b/.github/ISSUE_TEMPLATE/feature---enhancement-request.md new file mode 100644 index 000000000..dafdbd2ec --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature---enhancement-request.md @@ -0,0 +1,7 @@ +--- +name: Feature / Enhancement request +about: Suggest an idea for TorrentPier +title: "[Feature]" +labels: Feature, Enhancement +assignees: '' +--- diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 066b2d920..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 03c56780f..000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: TorrentPier nightly builder - -on: - push: - branches: - - master - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.1' - - - name: Install Composer dependencies - run: composer install --no-progress --prefer-dist --optimize-autoloader - - - name: Get commit hash - id: get_commit_hash - run: | - COMMIT_HASH=$(git rev-parse --short HEAD) - echo "COMMIT_HASH=$COMMIT_HASH" >> $GITHUB_OUTPUT - - - name: Create archive - id: create_zip - run: | - ZIP_NAME="torrentpier-${{ steps.get_commit_hash.outputs.COMMIT_HASH }}.zip" - zip -r "$ZIP_NAME" . -x ".git/*" ".github/*" - echo "ZIP_NAME=$ZIP_NAME" >> $GITHUB_OUTPUT - - - name: Upload Archive - uses: actions/upload-artifact@v4 - with: - name: TorrentPier - path: ${{ steps.create_zip.outputs.ZIP_NAME }} diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml new file mode 100644 index 000000000..47028004c --- /dev/null +++ b/.github/workflows/cd.yml @@ -0,0 +1,83 @@ +name: Continuous Deployment + +on: + push: + tags: + - "v*.*.*" + +jobs: + generate-changelog: + name: Generate changelog + runs-on: ubuntu-22.04 + outputs: + release_body: ${{ steps.git-cliff.outputs.content }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Generate a changelog + uses: orhun/git-cliff-action@v4 + id: git-cliff + with: + config: cliff-releases.toml + args: -vv --latest --no-exec --github-repo ${{ github.repository }} + + - name: Print the changelog + run: cat "${{ steps.git-cliff.outputs.changelog }}" + + release: + name: Create release + needs: [ generate-changelog ] + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v4 + - name: Set the release version + shell: bash + run: echo "RELEASE_VERSION=${GITHUB_REF:11}" >> $GITHUB_ENV + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.1' + + - name: Update composer.lock file + run: composer update --no-install + + - name: Install Composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Cleanup + run: php _cleanup.php && rm _cleanup.php + + - name: Create archive + id: create-zip + run: | + ZIP_NAME="torrentpier-v${{ env.RELEASE_VERSION }}.zip" + zip -r "$ZIP_NAME" . -x ".git/*" + echo "ZIP_NAME=$ZIP_NAME" >> $GITHUB_OUTPUT + + - name: Publish to GitHub + if: ${{ !contains(github.ref, '-') }} + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ steps.create-zip.outputs.ZIP_NAME }} + overwrite: true + tag: ${{ github.ref }} + release_name: "v${{ env.RELEASE_VERSION }}" + body: "${{ needs.generate-changelog.outputs.release_body }}" + + - name: Publish to GitHub (pre-release) + if: ${{ contains(github.ref, '-') }} + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ steps.create-zip.outputs.ZIP_NAME }} + overwrite: true + tag: ${{ github.ref }} + release_name: "v${{ env.RELEASE_VERSION }}" + body: "${{ needs.generate-changelog.outputs.release_body }}" + prerelease: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..e92dfe326 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,80 @@ +name: Continuous Integration + +on: + push: + branches: + - master + +jobs: + nightly: + name: Nightly builds πŸ“¦ + runs-on: ubuntu-22.04 + + steps: + - name: Checkout code πŸ—³ + uses: actions/checkout@v4 + + - name: Setup PHP πŸ”© + uses: shivammathur/setup-php@v2 + with: + php-version: '8.1' + + - name: Update composer.lock file + run: composer update --no-install + + - name: Install Composer dependencies πŸͺš + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Get commit hash πŸ”— + id: get-commit-hash + run: | + COMMIT_HASH=$(git rev-parse --short HEAD) + echo "COMMIT_HASH=$COMMIT_HASH" >> $GITHUB_OUTPUT + + - name: Cleanup + run: php _cleanup.php && rm _cleanup.php + + - name: Create archive πŸ—ž + id: create-zip + run: | + ZIP_NAME="torrentpier-${{ steps.get-commit-hash.outputs.COMMIT_HASH }}.zip" + zip -r "$ZIP_NAME" . -x ".git/*" + echo "ZIP_NAME=$ZIP_NAME" >> $GITHUB_OUTPUT + + - name: Upload Archive πŸ“€ + uses: actions/upload-artifact@v4 + with: + name: TorrentPier-master + path: ${{ steps.create-zip.outputs.ZIP_NAME }} + + deploy: + name: πŸŽ‰ Deploy + runs-on: ubuntu-22.04 + steps: + - name: 🚚 Get latest code + uses: actions/checkout@v4 + + - name: πŸ”© Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.1' + + - name: Update composer.lock file + run: composer update --no-install + + - name: πŸ–‡ Install Composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: πŸ“‚ Sync files + uses: SamKirkland/FTP-Deploy-Action@v4.3.5 + with: + server: ${{ secrets.FTP_SERVER }} + username: ${{ secrets.FTP_USERNAME }} + password: ${{ secrets.FTP_PASSWORD }} + server-dir: ${{ secrets.FTP_DIR }} + protocol: ${{ secrets.FTP_PROTOCOL }} + port: ${{ secrets.FTP_PORT }} + exclude: | + **/.git* + **/.git*/** + .env diff --git a/.github/workflows/changelog.yml b/.github/workflows/schedule.yml similarity index 78% rename from .github/workflows/changelog.yml rename to .github/workflows/schedule.yml index 4a67da3be..209512552 100644 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/schedule.yml @@ -1,13 +1,14 @@ name: Changelog generation on: - push: - branches: - - master + schedule: + - cron: '0 0 * * *' + workflow_dispatch: jobs: changelog: - runs-on: ubuntu-latest + name: Changelog generation + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v4 @@ -32,8 +33,8 @@ jobs: - name: Commit changelog run: | git checkout master - git config user.name 'belomaxorka' - git config user.email 'roman25052006.kelesh@gmail.com' + git config --local user.name 'belomaxorka' + git config --local user.email 'roman25052006.kelesh@gmail.com' set +e git add CHANGELOG.md git commit -m "Update CHANGELOG.md πŸ“–" diff --git a/.gitignore b/.gitignore index fd7fa4bb3..dd0e1f365 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,6 @@ ### TorrentPier ### *.log -/*.txt -*.integrity install.php_* composer-setup.php .env diff --git a/CHANGELOG.md b/CHANGELOG.md index 18c102f55..79cdf0541 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,150 @@ ### πŸš€ Features +- *(admin_smilies)* Added confirmation on smilie deleting ([#1895](https://github.com/torrentpier/torrentpier/pull/1895)) - ([b51820e](https://github.com/torrentpier/torrentpier/commit/b51820e1861044143321fcde5239c22abc3de984)) +- *(freeipapi)* Added ability to use own API token ([#1901](https://github.com/torrentpier/torrentpier/pull/1901)) - ([513e306](https://github.com/torrentpier/torrentpier/commit/513e3065d34409931c4198c03b080f232f1d809b)) +- Added ability to hide peer country in peer list ([#1891](https://github.com/torrentpier/torrentpier/pull/1891)) - ([2555ebc](https://github.com/torrentpier/torrentpier/commit/2555ebce4717f871922495e48cbca9e22da78bd5)) +- Added ability to hide BitTorrent client in peers list ([#1890](https://github.com/torrentpier/torrentpier/pull/1890)) - ([f5d65b8](https://github.com/torrentpier/torrentpier/commit/f5d65b8911c5e864f000348a6d1aefbb4c09c2b4)) + +### πŸ› Bug Fixes + +- Incorrect rounding in execution time counter ([#1899](https://github.com/torrentpier/torrentpier/pull/1899)) - ([781b724](https://github.com/torrentpier/torrentpier/commit/781b7240c41ddd141cfb057480c10d9cee30e6d7)) +- `Undefined array key "smile"` when are no smilies ([#1896](https://github.com/torrentpier/torrentpier/pull/1896)) - ([36d3992](https://github.com/torrentpier/torrentpier/commit/36d399220e2c16a582e1e400df0002c164f5ec3b)) +- Peer country flag not shown in peers list ([#1894](https://github.com/torrentpier/torrentpier/pull/1894)) - ([8edba72](https://github.com/torrentpier/torrentpier/commit/8edba72f09f037225ede058cf09c830b1a01e78f)) + +### πŸ“¦ Dependencies + +- *(deps)* Bump symfony/polyfill from 1.31.0 to 1.32.0 ([#1900](https://github.com/torrentpier/torrentpier/pull/1900)) - ([a4793f6](https://github.com/torrentpier/torrentpier/commit/a4793f6ce103f22941d72793e2bf8cdf9f78d494)) + +### βš™οΈ Miscellaneous + +- Minor improvements ([#1898](https://github.com/torrentpier/torrentpier/pull/1898)) - ([2f02692](https://github.com/torrentpier/torrentpier/commit/2f026921ee331226900b3cd4f1bb238f6562b48d)) +- Minor improvements ([#1897](https://github.com/torrentpier/torrentpier/pull/1897)) - ([14086a0](https://github.com/torrentpier/torrentpier/commit/14086a0ed6181a0ff4496ee2e56f4fb70bfe18d5)) +- Minor improvements ([#1893](https://github.com/torrentpier/torrentpier/pull/1893)) - ([90ece5c](https://github.com/torrentpier/torrentpier/commit/90ece5c7621789f170246b2898841b347e264674)) +- Minor improvements ([#1892](https://github.com/torrentpier/torrentpier/pull/1892)) - ([1e5b93d](https://github.com/torrentpier/torrentpier/commit/1e5b93d2c072c5c35feef7567b3fcdb4b3597935)) + + +## [v2.4.5-rc.5](https://github.com/torrentpier/torrentpier/compare/v2.4.5-rc.4..v2.4.5-rc.5) (2025-05-03) + +### πŸš€ Features + +- *(admin_ranks)* Added confirmation on rank deleting ([#1888](https://github.com/torrentpier/torrentpier/pull/1888)) - ([e510ebc](https://github.com/torrentpier/torrentpier/commit/e510ebc3ba30be7bf99769b1e5540353bd53c333)) +- *(atom)* Hide topics from private forums ([#1889](https://github.com/torrentpier/torrentpier/pull/1889)) - ([75e9d5e](https://github.com/torrentpier/torrentpier/commit/75e9d5e4a8c5ec20f438e7b24a5469d219959a8c)) +- *(avatar upload)* Added `accept="image/*"` attribute ([#1841](https://github.com/torrentpier/torrentpier/pull/1841)) - ([56d531a](https://github.com/torrentpier/torrentpier/commit/56d531aa5ddb778d08a2796fa9fb865e5b3040ce)) +- *(emailer)* Added ability to configure `sendmail` - ([5ad4a70](https://github.com/torrentpier/torrentpier/commit/5ad4a7019d996d468650ab608ab53d6cf3ebb4f5)) +- *(magnet)* Added `xl` (eXact Length) parametr ([#1883](https://github.com/torrentpier/torrentpier/pull/1883)) - ([c0cdcff](https://github.com/torrentpier/torrentpier/commit/c0cdcff48825ce5fb0c89c0ec44eb95686aee74c)) +- *(playback_m3u.php)* Added checking auth to download ([#1848](https://github.com/torrentpier/torrentpier/pull/1848)) - ([0b8d8a5](https://github.com/torrentpier/torrentpier/commit/0b8d8a5210ee761dddaa57fc48bb48b0ede1ec3c)) + +### πŸ› Bug Fixes + +- *(cache)* Implicitly marking parameter `$name` as nullable is deprecated ([#1877](https://github.com/torrentpier/torrentpier/pull/1877)) - ([c3b4000](https://github.com/torrentpier/torrentpier/commit/c3b40003b778a725e958cebee6446bcfd6a68b10)) +- Displaying `Network news` and `Latest news` for guests when foums are private ([#1879](https://github.com/torrentpier/torrentpier/pull/1879)) - ([9f96090](https://github.com/torrentpier/torrentpier/commit/9f96090cc419f828e54e69a91a906a3f3d92c255)) +- Pagination issue in `Report on action` page ([#1872](https://github.com/torrentpier/torrentpier/pull/1872)) - ([8358aa0](https://github.com/torrentpier/torrentpier/commit/8358aa00de2ec9efd4c51b8bef11bd700a56c19c)) +- `tablesorting` issues & incorrect `user_role` for pending users ([#1871](https://github.com/torrentpier/torrentpier/pull/1871)) - ([595adbe](https://github.com/torrentpier/torrentpier/commit/595adbe4da5296b0f3ebde6628e58e878c0fb7d5)) +- Fixed TorrentPier build-in emojis showing in ACP ([#1870](https://github.com/torrentpier/torrentpier/pull/1870)) - ([12792e7](https://github.com/torrentpier/torrentpier/commit/12792e74f71a57448277dda46471563a7fea71db)) + +### πŸ“¦ Dependencies + +- *(deps)* Bump vlucas/phpdotenv from 5.6.1 to 5.6.2 ([#1887](https://github.com/torrentpier/torrentpier/pull/1887)) - ([7a14464](https://github.com/torrentpier/torrentpier/commit/7a14464d20fe8d2f8b980a82647c6b9ec081f621)) +- *(deps)* Bump php-curl-class/php-curl-class from 11.1.0 to 12.0.0 ([#1868](https://github.com/torrentpier/torrentpier/pull/1868)) - ([bd5aa2a](https://github.com/torrentpier/torrentpier/commit/bd5aa2a5e71560409bc630ea2334e33c77458ab3)) +- *(deps)* Bump monolog/monolog from 3.8.1 to 3.9.0 ([#1865](https://github.com/torrentpier/torrentpier/pull/1865)) - ([6440162](https://github.com/torrentpier/torrentpier/commit/64401621879af0cc445c38687c571d2fec184410)) +- *(deps)* Bump php-curl-class/php-curl-class from 11.0.5 to 11.1.0 ([#1864](https://github.com/torrentpier/torrentpier/pull/1864)) - ([de2fcea](https://github.com/torrentpier/torrentpier/commit/de2fceabedefd07441ba6801417157a9828e0e2a)) +- *(deps)* Bump egulias/email-validator from 4.0.3 to 4.0.4 ([#1858](https://github.com/torrentpier/torrentpier/pull/1858)) - ([3ced460](https://github.com/torrentpier/torrentpier/commit/3ced460640e4bfe27a91acd0408e73c3c49e1534)) +- *(deps)* Bump filp/whoops from 2.17.0 to 2.18.0 ([#1853](https://github.com/torrentpier/torrentpier/pull/1853)) - ([7ca0582](https://github.com/torrentpier/torrentpier/commit/7ca058256186b7b690003308d660a3a6271e84d2)) +- *(deps)* Bump php-curl-class/php-curl-class from 11.0.4 to 11.0.5 ([#1849](https://github.com/torrentpier/torrentpier/pull/1849)) - ([37ad07a](https://github.com/torrentpier/torrentpier/commit/37ad07a40c1adf29f712f469d2850753d32a5eb9)) +- *(deps)* Bump belomaxorka/captcha from 1.2.3 to 1.2.4 - ([4641b0a](https://github.com/torrentpier/torrentpier/commit/4641b0a0d0e055d684ec36d41bfaf22b4d4b2ee1)) +- *(deps)* Bump belomaxorka/captcha from 1.2.2 to 1.2.3 ([#1842](https://github.com/torrentpier/torrentpier/pull/1842)) - ([be65f7c](https://github.com/torrentpier/torrentpier/commit/be65f7c55cbf81d889d5083c9344ccef400e8e19)) + +### 🚜 Refactor + +- Password generation ([#1847](https://github.com/torrentpier/torrentpier/pull/1847)) - ([af2403f](https://github.com/torrentpier/torrentpier/commit/af2403f1918845e8af3d9fa7708623eef6aa427e)) +- Moved `Select` class into `Legacy\Common` ([#1846](https://github.com/torrentpier/torrentpier/pull/1846)) - ([bd0ef06](https://github.com/torrentpier/torrentpier/commit/bd0ef063fac328ed16537aacbc12e287a8d8206b)) + +### βš™οΈ Miscellaneous + +- *(.cliffignore)* Added one more commit ([#1860](https://github.com/torrentpier/torrentpier/pull/1860)) - ([974d359](https://github.com/torrentpier/torrentpier/commit/974d3590c1fb11c6314da4a4b8115a2229e32bbd)) +- *(README)* Removed `Build actions` badge ([#1861](https://github.com/torrentpier/torrentpier/pull/1861)) - ([e9920ab](https://github.com/torrentpier/torrentpier/commit/e9920ab59803552e3a1a00b603962208a62efe4e)) +- *(cliff)* Added `.cliffignore` file to ignore reverted commits ([#1859](https://github.com/torrentpier/torrentpier/pull/1859)) - ([2eab551](https://github.com/torrentpier/torrentpier/commit/2eab551bd75e7acfd6f4dabe13b2a30ac09db880)) +- *(nightly builds)* Added cleanup step ([#1851](https://github.com/torrentpier/torrentpier/pull/1851)) - ([299d9a1](https://github.com/torrentpier/torrentpier/commit/299d9a1f6c4f244e435803212e763c252e5bd396)) +- *(password_hash)* Changed `cost` to `12` by default ([#1886](https://github.com/torrentpier/torrentpier/pull/1886)) - ([1663e19](https://github.com/torrentpier/torrentpier/commit/1663e19c3f80ae15792d6ffe4ce64e40129b14db)) +- *(render_flag)* Hide names for specified (`$nameIgnoreList`) flags ([#1862](https://github.com/torrentpier/torrentpier/pull/1862)) - ([83e42bc](https://github.com/torrentpier/torrentpier/commit/83e42bc5db086f60a6038b3fffca5982ceeced51)) +- *(text captcha)* Disabled scatter effect by default - ([3af5202](https://github.com/torrentpier/torrentpier/commit/3af5202f7b2a4ea5d14bbc4808b7a380de2e0dc0)) +- Updated nightly builds link ([#1885](https://github.com/torrentpier/torrentpier/pull/1885)) - ([6bd000b](https://github.com/torrentpier/torrentpier/commit/6bd000bc0d6176dbe1f0a573f081c9daefd3718b)) +- Composer dependencies are installed according to the minimum supported PHP version ([#1884](https://github.com/torrentpier/torrentpier/pull/1884)) - ([5fe7700](https://github.com/torrentpier/torrentpier/commit/5fe770070e1cd71ea50ea3ad3825a322774f0baf)) +- Corrected `php` version in `composer.json` ([#1882](https://github.com/torrentpier/torrentpier/pull/1882)) - ([bc1713a](https://github.com/torrentpier/torrentpier/commit/bc1713abdd28d04e8e1da3c3eabeb5170a35a460)) +- Composer dependencies are installed according to the minimum supported PHP version ([#1881](https://github.com/torrentpier/torrentpier/pull/1881)) - ([5c4972e](https://github.com/torrentpier/torrentpier/commit/5c4972ec12340cbffb8ac941d390ee6c2c89b635)) +- Minor improvements ([#1880](https://github.com/torrentpier/torrentpier/pull/1880)) - ([de8f192](https://github.com/torrentpier/torrentpier/commit/de8f1925bae3b38db18b86eb4a10337853638ad7)) +- Minor improvements ([#1876](https://github.com/torrentpier/torrentpier/pull/1876)) - ([eeb391d](https://github.com/torrentpier/torrentpier/commit/eeb391da6a16440492a3b803f63be301ba3d02d3)) +- Minor improvements ([#1875](https://github.com/torrentpier/torrentpier/pull/1875)) - ([41a78dd](https://github.com/torrentpier/torrentpier/commit/41a78ddbcbc628f0592c59879df0170bf48664aa)) +- Minor improvements ([#1874](https://github.com/torrentpier/torrentpier/pull/1874)) - ([0f1a69e](https://github.com/torrentpier/torrentpier/commit/0f1a69e32d8d5eb5053b021844845911c619d8cd)) +- Fetch only necessary sitemap parameters in `admin_sitemap.php` ([#1873](https://github.com/torrentpier/torrentpier/pull/1873)) - ([f9c8160](https://github.com/torrentpier/torrentpier/commit/f9c8160f8e897950a038a74ad7ee30b116f7b2b8)) +- Changed placeholder IP address from `7f000001` to `0` ([#1869](https://github.com/torrentpier/torrentpier/pull/1869)) - ([84e2392](https://github.com/torrentpier/torrentpier/commit/84e23928968f943826bdc4390c52365357d56f32)) +- Minor improvements ([#1866](https://github.com/torrentpier/torrentpier/pull/1866)) - ([7237653](https://github.com/torrentpier/torrentpier/commit/72376532b32395eda04dc032c07ca08b27346c6b)) +- Some minor improvements ([#1855](https://github.com/torrentpier/torrentpier/pull/1855)) - ([3cc880e](https://github.com/torrentpier/torrentpier/commit/3cc880eeb8be41596d5e8eaf19297046500afcf7)) + +### ◀️ Revert + +- Added `TorrentPier instance hash` generation - ([eabf851](https://github.com/torrentpier/torrentpier/commit/eabf851ee60d29835d1979f46dcf2b9d82576c1b)) +- Added `IndexNow` protocol support πŸ€– - ([1b288a9](https://github.com/torrentpier/torrentpier/commit/1b288a96e443e06c4f4e9ea374037d3b0af8a639)) + + +## [v2.4.5-rc.4](https://github.com/torrentpier/torrentpier/compare/v2.4.5-rc.3..v2.4.5-rc.4) (2025-03-09) + +### πŸš€ Features + +- *(captcha)* Added `Text Captcha` provider ([#1839](https://github.com/torrentpier/torrentpier/pull/1839)) - ([74ea157](https://github.com/torrentpier/torrentpier/commit/74ea1573b298be5a935caaca0b3cc57cb1e9264a)) +- *(show post bbcode)* Added `'only_for_first_post'` param ([#1830](https://github.com/torrentpier/torrentpier/pull/1830)) - ([4dcd1fb](https://github.com/torrentpier/torrentpier/commit/4dcd1fb16e4e84acd1231ad821a2f05658b849ad)) +- *(sitemap)* Update `lastmod` when a new reply in topic ([#1737](https://github.com/torrentpier/torrentpier/pull/1737)) - ([bc95e14](https://github.com/torrentpier/torrentpier/commit/bc95e14be328303bb37e31299661b03045e37d07)) +- Added `$bb_cfg['auto_language_detection']` parametr ([#1835](https://github.com/torrentpier/torrentpier/pull/1835)) - ([b550fa5](https://github.com/torrentpier/torrentpier/commit/b550fa59f9ee96ca89e5b6db880147bc72841e93)) +- Easter egg for the 20th anniversary of the TorrentPier! ([#1831](https://github.com/torrentpier/torrentpier/pull/1831)) - ([f2e513d](https://github.com/torrentpier/torrentpier/commit/f2e513dd8b0f82f4f02474db4b83d83904a93f29)) +- Added configuration files for `nginx` & `caddy` ([#1787](https://github.com/torrentpier/torrentpier/pull/1787)) - ([f7d3946](https://github.com/torrentpier/torrentpier/commit/f7d394607e4ea5bb9b7f2b33692204a226a4d78b)) + +### πŸ› Bug Fixes + +- *(info.php)* Undefined array key "show" ([#1836](https://github.com/torrentpier/torrentpier/pull/1836)) - ([f8c4e8f](https://github.com/torrentpier/torrentpier/commit/f8c4e8fb14090bc7403f24e363603bad9e231351)) +- *(tr_seed_bonus.php)* Incorrect `GROUP BY` ([#1820](https://github.com/torrentpier/torrentpier/pull/1820)) - ([dfd4e5e](https://github.com/torrentpier/torrentpier/commit/dfd4e5ebc9df916868210a7844f2a6f35e7b8aca)) + +### πŸ“¦ Dependencies + +- *(deps)* Bump bugsnag/bugsnag from 3.29.2 to 3.29.3 ([#1837](https://github.com/torrentpier/torrentpier/pull/1837)) - ([b954815](https://github.com/torrentpier/torrentpier/commit/b954815f5d0dce9520f65679e834d8bd49e571e0)) +- *(deps)* Bump php-curl-class/php-curl-class from 11.0.3 to 11.0.4 ([#1823](https://github.com/torrentpier/torrentpier/pull/1823)) - ([1c323a4](https://github.com/torrentpier/torrentpier/commit/1c323a45d777b033155da9a2becec506215bd94c)) +- *(deps)* Bump php-curl-class/php-curl-class from 11.0.1 to 11.0.3 ([#1821](https://github.com/torrentpier/torrentpier/pull/1821)) - ([dedf35b](https://github.com/torrentpier/torrentpier/commit/dedf35b794196034eb27d4125dff0798aed5f315)) + +### πŸ—‘οΈ Removed + +- *(posting.php)* Unused `'U_VIEWTOPIC` variable ([#1818](https://github.com/torrentpier/torrentpier/pull/1818)) - ([03ebbda](https://github.com/torrentpier/torrentpier/commit/03ebbda6be567d82d2a49fefe02356544fbd07cb)) +- Integrity checker πŸ₯ΊπŸͺ¦ ([#1827](https://github.com/torrentpier/torrentpier/pull/1827)) - ([ba3ce88](https://github.com/torrentpier/torrentpier/commit/ba3ce885c8d84ae939a0ce9c79b97877d3aaab41)) +- Redundant `.htaccess` files ([#1826](https://github.com/torrentpier/torrentpier/pull/1826)) - ([912b080](https://github.com/torrentpier/torrentpier/commit/912b080b16438b09f82fbc72a363589cc2f6209e)) + +### βš™οΈ Miscellaneous + +- *(Caddyfile)* Some minor fixes ([#1822](https://github.com/torrentpier/torrentpier/pull/1822)) - ([6f641aa](https://github.com/torrentpier/torrentpier/commit/6f641aa9d8d7afb30920c054a43347393ea05cc4)) +- *(README)* Fixed all grammatical errors, sentence structure and readibility ([#1812](https://github.com/torrentpier/torrentpier/pull/1812)) - ([bea3b0b](https://github.com/torrentpier/torrentpier/commit/bea3b0bccf335970ea5826543d8fa223329ef077)) +- *(_cleanup.php)* Added CLI mode check ([#1834](https://github.com/torrentpier/torrentpier/pull/1834)) - ([5dc9a54](https://github.com/torrentpier/torrentpier/commit/5dc9a5475c051911c579ea732ef52d7feb78e8ac)) +- *(announcer)* Some minor improvements ([#1819](https://github.com/torrentpier/torrentpier/pull/1819)) - ([bdefed4](https://github.com/torrentpier/torrentpier/commit/bdefed4dab3cc65330fcb9cb9750cc8e84beda1d)) +- *(cliff)* Removed TorrentPier logo ([#1817](https://github.com/torrentpier/torrentpier/pull/1817)) - ([7794242](https://github.com/torrentpier/torrentpier/commit/7794242750b44183312a2a45c9f54c6afde12f0e)) +- *(cliff)* Synced `cliff-releases.toml` with `cliff.toml` changes ([#1815](https://github.com/torrentpier/torrentpier/pull/1815)) - ([f2aea92](https://github.com/torrentpier/torrentpier/commit/f2aea92b3d79d72254e696fde31ad9b4bec5dcd0)) +- *(cliff)* Added missing line breaks after `body` ([#1814](https://github.com/torrentpier/torrentpier/pull/1814)) - ([2593f09](https://github.com/torrentpier/torrentpier/commit/2593f093a389a9c450725290862b99d911fbef5d)) +- *(installer)* Added cleanup step (for master builds) ([#1838](https://github.com/torrentpier/torrentpier/pull/1838)) - ([dd72136](https://github.com/torrentpier/torrentpier/commit/dd721367c7dc9956861fcd33af7f9f822cf80011)) +- *(installer)* Some minor improvements ([#1825](https://github.com/torrentpier/torrentpier/pull/1825)) - ([4f89685](https://github.com/torrentpier/torrentpier/commit/4f896854d3bb67300027f7542704f41c4869837f)) +- *(installer)* Some minor improvements ([#1824](https://github.com/torrentpier/torrentpier/pull/1824)) - ([f3714f0](https://github.com/torrentpier/torrentpier/commit/f3714f02f2c8fbfaccfdafb8f25a269664c48950)) +- *(workflow)* Short `release_name` ([#1816](https://github.com/torrentpier/torrentpier/pull/1816)) - ([c57db21](https://github.com/torrentpier/torrentpier/commit/c57db2104d7b8363d0b8ce8872ce90fc7410c724)) +- *(workflow)* Added `workflow_dispatch` for `schedule.yml` ([#1813](https://github.com/torrentpier/torrentpier/pull/1813)) - ([d54c07b](https://github.com/torrentpier/torrentpier/commit/d54c07b3da00fc8bcba5413cd4ae3f3c9f6007bb)) +- *(workflow)* Some improvements ([#1811](https://github.com/torrentpier/torrentpier/pull/1811)) - ([3a9dd6a](https://github.com/torrentpier/torrentpier/commit/3a9dd6a3c931cfbd682257c283a3296c4914548f)) +- *(workflow)* Some improvements ([#1810](https://github.com/torrentpier/torrentpier/pull/1810)) - ([c168c39](https://github.com/torrentpier/torrentpier/commit/c168c3956cf77886c14133ac10ec33aa0ae5bc4e)) +- Replaced `gregwar/captcha` with my own fork ([#1840](https://github.com/torrentpier/torrentpier/pull/1840)) - ([8585560](https://github.com/torrentpier/torrentpier/commit/858556043d3e45218ea8e803786d6b6de6d485d0)) +- Created cleanup script (for releases preparation) ([#1833](https://github.com/torrentpier/torrentpier/pull/1833)) - ([68bf26d](https://github.com/torrentpier/torrentpier/commit/68bf26d0f4ab33f5394d26f425e53817f3464ac8)) +- Bring back missing `cache` & `log` directories ([#1832](https://github.com/torrentpier/torrentpier/pull/1832)) - ([249c988](https://github.com/torrentpier/torrentpier/commit/249c9889890291d56317dd703414bdb57ecaa41f)) +- Some minor improvements ([#1829](https://github.com/torrentpier/torrentpier/pull/1829)) - ([3b8ee4c](https://github.com/torrentpier/torrentpier/commit/3b8ee4c4d3ab4631425fbe44f197b6a9bd7d158c)) + +## New Contributors ❀️ + +* @xeddmc made their first contribution in [#1812](https://github.com/torrentpier/torrentpier/pull/1812) + +## [v2.4.5-rc.3](https://github.com/torrentpier/torrentpier/compare/v2.4.5-rc.2..v2.4.5-rc.3) (2025-02-06) + +### πŸš€ Features + - *(announcer)* Added some disallowed ports by default ([#1767](https://github.com/torrentpier/torrentpier/pull/1767)) - ([46288ec](https://github.com/torrentpier/torrentpier/commit/46288ec19830c84aedb156e1f30d7ec8a0803e0d)) - *(announcer)* Added `is_numeric()` checking for some fields ([#1766](https://github.com/torrentpier/torrentpier/pull/1766)) - ([096bb51](https://github.com/torrentpier/torrentpier/commit/096bb5124fa27d27c3e60031edc432d877f1c507)) - *(announcer)* Added `event` verifying ([#1765](https://github.com/torrentpier/torrentpier/pull/1765)) - ([6a19323](https://github.com/torrentpier/torrentpier/commit/6a1932313801e55fbcfb047fdcef87266f472c33)) @@ -13,27 +157,36 @@ - *(announcer)* Block `User-Agent` strings that are too long ([#1763](https://github.com/torrentpier/torrentpier/pull/1763)) - ([a98f8f1](https://github.com/torrentpier/torrentpier/commit/a98f8f102a8253b0b22c80ef444fed1ec29177f3)) - *(announcer)* Blocking all ports lower then `1024` ([#1762](https://github.com/torrentpier/torrentpier/pull/1762)) - ([1bc7e09](https://github.com/torrentpier/torrentpier/commit/1bc7e09ddbeaf680b86095eed9a80b8ebf6169b3)) - *(cache)* Checking if extensions are installed ([#1759](https://github.com/torrentpier/torrentpier/pull/1759)) - ([7f31022](https://github.com/torrentpier/torrentpier/commit/7f31022cfca2acb28a5cba06961eeaf8d2c9de51)) +- *(captcha)* Added some new services πŸ€– ([#1771](https://github.com/torrentpier/torrentpier/pull/1771)) - ([d413c71](https://github.com/torrentpier/torrentpier/commit/d413c717188c9bd906f715e7137955dc9a42a003)) +- *(environment)* Make configurable `TP_HOST` and `TP_PORT` ([#1780](https://github.com/torrentpier/torrentpier/pull/1780)) - ([e51e091](https://github.com/torrentpier/torrentpier/commit/e51e09159333382a77b809b5f1da5e152a713143)) - *(installer)* Fully show non-installed extensions ([#1761](https://github.com/torrentpier/torrentpier/pull/1761)) - ([8fcc62d](https://github.com/torrentpier/torrentpier/commit/8fcc62d2a2fd41927b2f5dae215fe5bbf95f2c96)) - *(installer)* More explanations ([#1758](https://github.com/torrentpier/torrentpier/pull/1758)) - ([48ab52a](https://github.com/torrentpier/torrentpier/commit/48ab52ac8674afcb607c8e49134316a3e117236a)) - *(installer)* Check `Composer` dependencies after installing ([#1756](https://github.com/torrentpier/torrentpier/pull/1756)) - ([262b887](https://github.com/torrentpier/torrentpier/commit/262b8872a5b14068eb73d745adea6203c557e192)) - *(installer)* More explanations ([#1754](https://github.com/torrentpier/torrentpier/pull/1754)) - ([fd6f1f8](https://github.com/torrentpier/torrentpier/commit/fd6f1f86a5e9216469cd648601ecb9ba875f9eb6)) - *(installer)* Create `config.local.php` on local environment ([#1745](https://github.com/torrentpier/torrentpier/pull/1745)) - ([0d93b2c](https://github.com/torrentpier/torrentpier/commit/0d93b2c768c2965c12ac62e2f3b2886dc1ef31c2)) +- *(torrent)* Bring back old torrent file naming ([#1783](https://github.com/torrentpier/torrentpier/pull/1783)) - ([314c592](https://github.com/torrentpier/torrentpier/commit/314c592affbef4b8db48d562b9633aad27059a76)) +- *(workflow)* Automated deploy actual changes to `TorrentPier Demo` ([#1788](https://github.com/torrentpier/torrentpier/pull/1788)) - ([4333d6a](https://github.com/torrentpier/torrentpier/commit/4333d6aca4aeb8584ff8a8ef0bf76c537a3f371a)) - Used `TORRENT_MIMETYPE` constant instead of hardcoded string ([#1757](https://github.com/torrentpier/torrentpier/pull/1757)) - ([4b0d270](https://github.com/torrentpier/torrentpier/commit/4b0d270c89ec06abed590504f6a0cb70076a9e59)) ### πŸ› Bug Fixes +- *(announcer)* Null `event` exception ([#1784](https://github.com/torrentpier/torrentpier/pull/1784)) - ([b06e327](https://github.com/torrentpier/torrentpier/commit/b06e327cbb285a676814699eb5fb1fbc0e1f22e8)) - *(bb_die)* HTML characters converting ([#1744](https://github.com/torrentpier/torrentpier/pull/1744)) - ([4f1c7e4](https://github.com/torrentpier/torrentpier/commit/4f1c7e40d82e52f81eba44ead501e1f01058cc4f)) - *(debug)* Disabled `Bugsnag` reporting on local environment ([#1751](https://github.com/torrentpier/torrentpier/pull/1751)) - ([1f3b629](https://github.com/torrentpier/torrentpier/commit/1f3b629e9cea4d11fbf3cf29f575ba730bad898d)) - *(installer)* Missing `gd` extension ([#1749](https://github.com/torrentpier/torrentpier/pull/1749)) - ([a1c519d](https://github.com/torrentpier/torrentpier/commit/a1c519d938b848edffcbf7fbbe6a3fdb9a5394f1)) +- *(youtube player)* Mixed content issue ([#1795](https://github.com/torrentpier/torrentpier/pull/1795)) - ([3c0a1d5](https://github.com/torrentpier/torrentpier/commit/3c0a1d5d0018daa87ad3914ea04078a9a6d05fc2)) - Incorrect peer country flag ([#1768](https://github.com/torrentpier/torrentpier/pull/1768)) - ([0f091eb](https://github.com/torrentpier/torrentpier/commit/0f091eb546e34923d9d1ab34be5faf92080ec198)) ### πŸ“¦ Dependencies +- *(deps)* Bump jacklul/monolog-telegram from 3.1.0 to 3.2.0 ([#1776](https://github.com/torrentpier/torrentpier/pull/1776)) - ([420c92c](https://github.com/torrentpier/torrentpier/commit/420c92c0addf4dee91f3ae872517cb3224827a1f)) +- *(deps)* Bump filp/whoops from 2.16.0 to 2.17.0 ([#1777](https://github.com/torrentpier/torrentpier/pull/1777)) - ([a71609b](https://github.com/torrentpier/torrentpier/commit/a71609ba67a89480fabb7b62de450d9be09373fa)) - *(deps)* Bump php-curl-class/php-curl-class from 11.0.0 to 11.0.1 ([#1753](https://github.com/torrentpier/torrentpier/pull/1753)) - ([ce32031](https://github.com/torrentpier/torrentpier/commit/ce32031a0fb14cdf6c3f4ba379b530cbb52b0fea)) - *(deps)* Bump bugsnag/bugsnag from 3.29.1 to 3.29.2 ([#1752](https://github.com/torrentpier/torrentpier/pull/1752)) - ([f63d15c](https://github.com/torrentpier/torrentpier/commit/f63d15c49e3992837413b2c7a0160d599b44f2ef)) ### πŸ—‘οΈ Removed +- *(environment)* Extra `DB_CONNECTION` variable ([#1775](https://github.com/torrentpier/torrentpier/pull/1775)) - ([cd2786b](https://github.com/torrentpier/torrentpier/commit/cd2786bb69c74cec88a447f66750d014fc4d3612)) - Some unused tracker config variables ([#1769](https://github.com/torrentpier/torrentpier/pull/1769)) - ([7f9df35](https://github.com/torrentpier/torrentpier/commit/7f9df35d3bd0e9d23284b8bd9c36a0f52158f5d7)) ### πŸ“š Documentation @@ -42,12 +195,38 @@ ### βš™οΈ Miscellaneous +- *(cd workflow)* Fixed release body creation ([#1809](https://github.com/torrentpier/torrentpier/pull/1809)) - ([7378cb3](https://github.com/torrentpier/torrentpier/commit/7378cb3af5cc56343c667a9d920038b05327e97b)) +- *(cd workflow)* Fixed release body creation ([#1807](https://github.com/torrentpier/torrentpier/pull/1807)) - ([cc679a8](https://github.com/torrentpier/torrentpier/commit/cc679a80246f3ff65136653025d826bf1458db3a)) +- *(changelog workflow)* Minor improvements ([#1802](https://github.com/torrentpier/torrentpier/pull/1802)) - ([15ca21f](https://github.com/torrentpier/torrentpier/commit/15ca21f03840281f7d4402959aa8bfb7d407b45b)) +- *(checksum workflow)* Fixed incorrect file path ([#1799](https://github.com/torrentpier/torrentpier/pull/1799)) - ([4eb5a9a](https://github.com/torrentpier/torrentpier/commit/4eb5a9adc61c4e116feb09208091efb914275da2)) - *(cliff)* Changed emoji for dependencies ([#1755](https://github.com/torrentpier/torrentpier/pull/1755)) - ([55d4670](https://github.com/torrentpier/torrentpier/commit/55d467048370b51cd592982c8026702dca8813d5)) - *(cliff)* Use blockquote for notice ([#1748](https://github.com/torrentpier/torrentpier/pull/1748)) - ([61e5592](https://github.com/torrentpier/torrentpier/commit/61e55925f312417bdb63c88a7c8939c3b2eb2ac5)) - *(cliff)* Fixed typo ([#1747](https://github.com/torrentpier/torrentpier/pull/1747)) - ([4936af7](https://github.com/torrentpier/torrentpier/commit/4936af7d3d10f553d8586a14de249c32e50f3494)) - *(cliff)* Notice about previous changelog file ([#1746](https://github.com/torrentpier/torrentpier/pull/1746)) - ([85395be](https://github.com/torrentpier/torrentpier/commit/85395be5e7c6a891c79ec72cf215894af097f819)) - *(copyright)* Updated copyright year ([#1760](https://github.com/torrentpier/torrentpier/pull/1760)) - ([6697410](https://github.com/torrentpier/torrentpier/commit/6697410c1df6c8d9d7f511b1e984ae90d888ae0e)) +- *(database)* Use `DEFAULT ''` for `privmsgs_subject` ([#1786](https://github.com/torrentpier/torrentpier/pull/1786)) - ([387a258](https://github.com/torrentpier/torrentpier/commit/387a25870abd37b641b55ffd98e13f4aaecb73b1)) +- *(deploy action)* Specify some missing params ([#1789](https://github.com/torrentpier/torrentpier/pull/1789)) - ([6115900](https://github.com/torrentpier/torrentpier/commit/6115900b765752209a6ed1dfb83e4f0cbee2ae77)) +- *(emailer)* Use constants for email types ([#1794](https://github.com/torrentpier/torrentpier/pull/1794)) - ([c95d414](https://github.com/torrentpier/torrentpier/commit/c95d414ef63ca37118f1f660880cd58b4480c414)) +- *(integrity checker)* Disabled by default in `Demo mode` ([#1804](https://github.com/torrentpier/torrentpier/pull/1804)) - ([44be40c](https://github.com/torrentpier/torrentpier/commit/44be40c2e849c60eb4f10ca7e0bae0463791355e)) +- *(integrity checker)* Some enhancements ([#1797](https://github.com/torrentpier/torrentpier/pull/1797)) - ([09cafc2](https://github.com/torrentpier/torrentpier/commit/09cafc2285dd171cb2213ece9549993a3321527c)) +- *(issue template)* Improved `Feature request` template ([#1774](https://github.com/torrentpier/torrentpier/pull/1774)) - ([268f79d](https://github.com/torrentpier/torrentpier/commit/268f79d7259de67aa8877fcf7130ff0069469ab2)) +- *(issue template)* Improved `Bug report` template ([#1773](https://github.com/torrentpier/torrentpier/pull/1773)) - ([53ebfef](https://github.com/torrentpier/torrentpier/commit/53ebfef32c0e9016257e03b96ef96349e22d3e9b)) +- *(notify)* Hide notify checkbox in topic for guests ([#1793](https://github.com/torrentpier/torrentpier/pull/1793)) - ([8e4cd97](https://github.com/torrentpier/torrentpier/commit/8e4cd97734fc46f33459c4b00a0fe38b0597f92b)) +- *(readme)* Improved installation guide ([#1781](https://github.com/torrentpier/torrentpier/pull/1781)) - ([e579b81](https://github.com/torrentpier/torrentpier/commit/e579b816b4dc346b3242cb3d9db292ad05596c1f)) +- *(readme)* Minor improvements ([#1779](https://github.com/torrentpier/torrentpier/pull/1779)) - ([5b0ed02](https://github.com/torrentpier/torrentpier/commit/5b0ed020890a8f938df912f9215cccbda42b0317)) +- *(readme)* Added Caddy webserver ([#1778](https://github.com/torrentpier/torrentpier/pull/1778)) - ([970a028](https://github.com/torrentpier/torrentpier/commit/970a0282e3631c403029c959ffd46b21c5cad0cd)) +- *(workflow)* Refactored all workflows ([#1803](https://github.com/torrentpier/torrentpier/pull/1803)) - ([a29d57b](https://github.com/torrentpier/torrentpier/commit/a29d57b2f8673733bbfbea3fb96eebe841078d49)) +- *(workflow)* Trying combine `changelog workflow` with `checksums workflow` ([#1800](https://github.com/torrentpier/torrentpier/pull/1800)) - ([60c6057](https://github.com/torrentpier/torrentpier/commit/60c605778412335ce97d41489c3b6ee9c051454b)) +- Automated releases generation ([#1808](https://github.com/torrentpier/torrentpier/pull/1808)) - ([6c9372c](https://github.com/torrentpier/torrentpier/commit/6c9372c407327c9bb443b2ecf16eff64c0245c4b)) +- Automated releases generation ([#1806](https://github.com/torrentpier/torrentpier/pull/1806)) - ([bc74550](https://github.com/torrentpier/torrentpier/commit/bc745502940207f3f24c83057cd680fe69355961)) +- Automated releases generation ([#1805](https://github.com/torrentpier/torrentpier/pull/1805)) - ([425e2e8](https://github.com/torrentpier/torrentpier/commit/425e2e87d5a7f097b961b1a14fbafcdabb9d1666)) +- Minor improvements ([#1796](https://github.com/torrentpier/torrentpier/pull/1796)) - ([8650ad3](https://github.com/torrentpier/torrentpier/commit/8650ad30f429ab14a03f44b26d7be7701f1985f1)) - Update `cliff.toml` - ([254dca2](https://github.com/torrentpier/torrentpier/commit/254dca2b27c2d92421d3e639c80b0adf1172202f)) - Minor improvements ([#1743](https://github.com/torrentpier/torrentpier/pull/1743)) - ([e73d650](https://github.com/torrentpier/torrentpier/commit/e73d65011fff0a8b8e1368eef61bbfb67e87eab8)) - Enabled `$bb_cfg['integrity_check']` by defaul ([#1742](https://github.com/torrentpier/torrentpier/pull/1742)) - ([7e3601e](https://github.com/torrentpier/torrentpier/commit/7e3601e63aff73be1428969ca37dda3da2537d9b)) + +## New Contributors ❀️ + +* @actions-user made their first contribution + diff --git a/README.md b/README.md index 06db7091d..8397b363b 100644 --- a/README.md +++ b/README.md @@ -8,29 +8,29 @@

License Stars Packagist - Build status Crowdin - TorrentPier nightly + TorrentPier nightly Downloads Version Last release Size + Deployed to TorrentPier Demo with FTP Deploy Action

## πŸ‚ About TorrentPier -TorrentPier β€” bull-powered BitTorrent Public/Private tracker engine, written in php. High speed, simple modification, high load -architecture. In addition, we have very helpful -[official support forum](https://torrentpier.com), where it's possible to get any support and download modifications for engine. +TorrentPier β€” bull-powered BitTorrent Public/Private tracker engine, written in PHP. High speed, simple modifications, load-balanced +architecture. In addition, we have a very helpful +[official support forum](https://torrentpier.com), where it's possible to get support and download modifications for the engine. ## 🌈 Current status -TorrentPier is currently in active development. The goal is to remove all legacy code and rewrite existing to -modern standards. If you want to go deep on the code, check our [issues](https://github.com/torrentpier/torrentpier/issues) -and go from there. The documentation will be translated into english in the near future, currently russian is the main language of it. +TorrentPier is currently in active development. The goal is to remove all legacy code and rewrite the existing code to +modern specifications. If you want delve deep into the code, check our [issues](https://github.com/torrentpier/torrentpier/issues) +and go from there. The documentation will be translated to english in the near future, currently russian is the main language of it. ## ✨ Features -* Rich forum browsing/moderation tools +* Rich forum with browsing/moderation tools * High-load capable, heavily configurable announcer * Scrape support * FreeLeech @@ -38,11 +38,11 @@ and go from there. The documentation will be translated into english in the near * BitTorrent v2 support * Event-based invite system * Bonus points -* Polls system -* PM system -* Multilingual support (Fully supported for now only Russia and English languages) -* Atom feeds -* ... and MUCH MORE! +* Polling system +* PM/DM system +* Multilingual support (Russian and English is currently fully supported, with others in the future) +* Atom/RSS feeds +* ... and so MUCH MORE! ## πŸ–₯️ Demo @@ -51,41 +51,56 @@ and go from there. The documentation will be translated into english in the near * Password: `admin` > [!NOTE] -> Demo is resetting every 24 hours! +> Demo resets every 24 hours! ## πŸ”§ Requirements -* Apache / nginx +* Apache / nginx ([example config](install/nginx.conf)) / caddy ([example config](install/Caddyfile)) * MySQL 5.5.3 or above / MariaDB 10.0 or above / Percona -* PHP: 8.1 / 8.2 / 8.3 +* PHP: 8.1 / 8.2 / 8.3 / 8.4 * PHP Extensions: mbstring, gd, bcmath, intl, tidy (optional), xml, xmlwriter * Crontab (Recommended) ## πŸ’Ύ Installation -For installation, select one of installation variants below. +For the installation, select one of the installation variants below: ### Quick (Clean install) πŸš€ Check out our [autoinstall](https://github.com/torrentpier/autoinstall) repository with detailed instructions. > [!IMPORTANT] -> Thanks to [Sergei Solovev](https://github.com/SeAnSolovev) for installation script ❀️ +> Thanks to [Sergei Solovev](https://github.com/SeAnSolovev) for this installation script ❀️ ### Quick (For web-panels) β˜•οΈ -1. Select the folder where you want to install TorrentPier (`cd /path/to/public_html`) -2. Download latest version of TorrentPier (`sudo git clone https://github.com/torrentpier/torrentpier.git .`) -3. After, run `php install.php` and follow the given steps +1. Select the folder where you want TorrentPier installed + ```shell + cd /path/to/public_html + ``` +2. Download the latest version of TorrentPier + ```shell + sudo git clone https://github.com/torrentpier/torrentpier.git . + ``` +3. After completing, execute the command below and follow the instructions + ```shell + php install.php + ``` 4. Voila! ✨ ### Manual πŸ”© 1. Install [Composer](https://getcomposer.org/) -2. Run `composer create-project torrentpier/torrentpier` +2. Run the following command to create the TorrentPier project + ```shell + composer create-project torrentpier/torrentpier + ``` 3. [Check our system requirements](#-requirements) -4. After, run `composer install` on the project directory -5. Create database and import dump located at `install/sql/mysql.sql` +4. After, run this command in the project directory to install Composer dependencies + ```shell + composer install + ``` +5. Create a database and import the dump located at `install/sql/mysql.sql` 6. Edit database configuration settings in the environment (`.env.example`), after, rename to `.env` 7. Provide write permissions to the specified folders: * `data/avatars`, `data/uploads`, `data/uploads/thumbs` @@ -94,15 +109,14 @@ Check out our [autoinstall](https://github.com/torrentpier/autoinstall) reposito 8. Voila! ✨ > [!IMPORTANT] -> The specific settings depend on the server you are using, but in general case we recommend chmod **0755** for folders, and chmod **0644** for files in them. +> The specific settings depend on the server you are using, but in general we recommend chmod **0755** for folders, and chmod **0644** for the files in them. ### Additional steps πŸ‘£ -1. Edit domain name and domain port in the configuration file or a local copy (`$reserved_name` and `$reserved_port`) -2. Edit this files: - * `favicon.png` (change on your own) - * `robots.txt` (change the addresses in lines `Host` and `Sitemap` on your own) -3. Log in to the forum with **admin/admin** login/password and finish setting up via admin panel +1. Edit these files: + * `favicon.png` (change to your own) + * `robots.txt` (change the addresses in lines `Host` and `Sitemap` to your own) +2. Log in to the forum using the **admin/admin** login/password, and finish setting up via admin panel. Don't forget to change your password! ## πŸ” Security vulnerabilities @@ -110,8 +124,8 @@ If you discover a security vulnerability within TorrentPier, please follow our [ ## πŸ“Œ Our recommendations -* *The recommended way to run `cron.php`.* - For significant tracker speed increase may be required to replace built-in cron.php by operating system daemon. -* *Local configuration copy.* - You can override the settings using local configuration file `library/config.local.php`. +* *It's recommended to run `cron.php`.* - For significant tracker speed increase it ay be required to replace the built-in cron.php in operating system daemon. +* *Local configuration copy.* - You can override the settings using the local configuration file `library/config.local.php`. ## πŸ’š Contributing / Contributors @@ -134,12 +148,18 @@ Support this project by becoming a sponsor or a backer.
Monero - 42zJE3FDvN8foP9QYgDrBjgtd7h2FipGCGmAcmG5VFQuRkJBGMbCvoLSmivepmAMEgik2E8MPWUzKaoYsGCtmhvL7ZN73jh + +``` +42zJE3FDvN8foP9QYgDrBjgtd7h2FipGCGmAcmG5VFQuRkJBGMbCvoLSmivepmAMEgik2E8MPWUzKaoYsGCtmhvL7ZN73jh +```
YooMoney - 4100118022415720 + +``` +4100118022415720 +```
## πŸ“¦ Versioning diff --git a/_cleanup.php b/_cleanup.php new file mode 100644 index 000000000..cbaf5deac --- /dev/null +++ b/_cleanup.php @@ -0,0 +1,85 @@ +isDir()) { + removeDir($file->getPathname()); + } else { + removeFile($file->getPathname()); + } + } + + if (rmdir($dir)) { + echo "- Folder removed: $dir" . PHP_EOL; + } else { + echo "- Folder cannot be removed: $dir" . PHP_EOL; + exit; + } +} diff --git a/admin/admin_board.php b/admin/admin_board.php index b836ff29f..191666675 100644 --- a/admin/admin_board.php +++ b/admin/admin_board.php @@ -136,8 +136,8 @@ switch ($mode) { 'POSTS_PER_PAGE' => $new['posts_per_page'], 'HOT_TOPIC' => $new['hot_threshold'], 'DEFAULT_DATEFORMAT' => $new['default_dateformat'], - 'LANG_SELECT' => \TorrentPier\Legacy\Select::language($new['default_lang'], 'default_lang'), - 'TIMEZONE_SELECT' => \TorrentPier\Legacy\Select::timezone($new['board_timezone'], 'board_timezone'), + 'LANG_SELECT' => \TorrentPier\Legacy\Common\Select::language($new['default_lang'], 'default_lang'), + 'TIMEZONE_SELECT' => \TorrentPier\Legacy\Common\Select::timezone($new['board_timezone'], 'board_timezone'), 'MAX_LOGIN_ATTEMPTS' => $new['max_login_attempts'], 'LOGIN_RESET_TIME' => $new['login_reset_time'], 'PRUNE_ENABLE' => (bool)$new['prune_enable'], diff --git a/admin/admin_forumauth.php b/admin/admin_forumauth.php index 797842a0a..fec7aa909 100644 --- a/admin/admin_forumauth.php +++ b/admin/admin_forumauth.php @@ -123,6 +123,7 @@ if ($submit) { } $datastore->update('cat_forums'); + CACHE('bb_cache')->rm(); bb_die($lang['FORUM_AUTH_UPDATED'] . '

' . sprintf($lang['CLICK_RETURN_FORUMAUTH'], '', '')); } diff --git a/admin/admin_forumauth_list.php b/admin/admin_forumauth_list.php index c45aa0092..37c49d251 100644 --- a/admin/admin_forumauth_list.php +++ b/admin/admin_forumauth_list.php @@ -153,6 +153,7 @@ if ($submit) { } $datastore->update('cat_forums'); + CACHE('bb_cache')->rm(); bb_die($lang['FORUM_AUTH_UPDATED'] . '

' . sprintf($lang['CLICK_RETURN_FORUMAUTH'], '', '')); } // End of submit diff --git a/admin/admin_ranks.php b/admin/admin_ranks.php index 366668301..03b63d5b2 100644 --- a/admin/admin_ranks.php +++ b/admin/admin_ranks.php @@ -29,6 +29,10 @@ if (isset($_GET['mode']) || isset($_POST['mode'])) { } } +if ($mode == 'delete' && isset($_POST['cancel'])) { + $mode = ''; +} + if ($mode != '') { if ($mode == 'edit' || $mode == 'add') { // @@ -123,29 +127,40 @@ if ($mode != '') { // Ok, they want to delete their rank // + $confirmed = isset($_POST['confirm']); if (isset($_POST['id']) || isset($_GET['id'])) { $rank_id = isset($_POST['id']) ? (int)$_POST['id'] : (int)$_GET['id']; } else { $rank_id = 0; } - if ($rank_id) { - $sql = 'DELETE FROM ' . BB_RANKS . " WHERE rank_id = $rank_id"; + if ($confirmed) { + if ($rank_id) { + $sql = 'DELETE FROM ' . BB_RANKS . " WHERE rank_id = $rank_id"; - if (!$result = DB()->sql_query($sql)) { - bb_die('Could not delete rank data'); + if (!$result = DB()->sql_query($sql)) { + bb_die('Could not delete rank data'); + } + + $sql = 'UPDATE ' . BB_USERS . " SET user_rank = 0 WHERE user_rank = $rank_id"; + if (!$result = DB()->sql_query($sql)) { + bb_die($lang['NO_UPDATE_RANKS']); + } + + $datastore->update('ranks'); + + bb_die($lang['RANK_REMOVED'] . '

' . sprintf($lang['CLICK_RETURN_RANKADMIN'], '', '') . '

' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '', '')); + } else { + bb_die($lang['MUST_SELECT_RANK']); } - - $sql = 'UPDATE ' . BB_USERS . " SET user_rank = 0 WHERE user_rank = $rank_id"; - if (!$result = DB()->sql_query($sql)) { - bb_die($lang['NO_UPDATE_RANKS']); - } - - $datastore->update('ranks'); - - bb_die($lang['RANK_REMOVED'] . '

' . sprintf($lang['CLICK_RETURN_RANKADMIN'], '', '') . '

' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '', '')); } else { - bb_die($lang['MUST_SELECT_RANK']); + $hidden_fields = ''; + $hidden_fields .= ''; + + print_confirmation([ + 'FORM_ACTION' => 'admin_ranks.php', + 'HIDDEN_FIELDS' => $hidden_fields, + ]); } } else { bb_die('Invalid mode'); diff --git a/admin/admin_sitemap.php b/admin/admin_sitemap.php index e40ebd307..3e3fd1fb6 100644 --- a/admin/admin_sitemap.php +++ b/admin/admin_sitemap.php @@ -14,7 +14,7 @@ if (!empty($setmodules)) { require __DIR__ . '/pagestart.php'; -$sql = 'SELECT * FROM ' . BB_CONFIG; +$sql = "SELECT * FROM " . BB_CONFIG . " WHERE config_name IN('sitemap_time', 'static_sitemap')"; if (!$result = DB()->sql_query($sql)) { bb_die('Could not query config information in admin_sitemap'); diff --git a/admin/admin_smilies.php b/admin/admin_smilies.php index c91723a5e..e53c24223 100644 --- a/admin/admin_smilies.php +++ b/admin/admin_smilies.php @@ -22,6 +22,10 @@ if (isset($_POST['mode']) || isset($_GET['mode'])) { $mode = ''; } +if ($mode == 'delete' && isset($_POST['cancel'])) { + $mode = ''; +} + $pathToSmilesDir = BB_ROOT . $bb_cfg['smilies_path']; $delimeter = '=+:'; $s_hidden_fields = ''; @@ -174,17 +178,28 @@ if (isset($_GET['import_pack']) || isset($_POST['import_pack'])) { } elseif ($mode != '') { switch ($mode) { case 'delete': + $confirmed = isset($_POST['confirm']); $smiley_id = (!empty($_POST['id'])) ? $_POST['id'] : $_GET['id']; $smiley_id = (int)$smiley_id; - $sql = 'DELETE FROM ' . BB_SMILIES . ' WHERE smilies_id = ' . $smiley_id; - $result = DB()->sql_query($sql); - if (!$result) { - bb_die('Could not delete smiley'); - } - $datastore->update('smile_replacements'); + if ($confirmed) { + $sql = 'DELETE FROM ' . BB_SMILIES . ' WHERE smilies_id = ' . $smiley_id; + $result = DB()->sql_query($sql); + if (!$result) { + bb_die('Could not delete smiley'); + } - bb_die($lang['SMILEY_DEL_SUCCESS'] . '

' . sprintf($lang['CLICK_RETURN_SMILEADMIN'], '', '') . '

' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '', '')); + $datastore->update('smile_replacements'); + bb_die($lang['SMILEY_DEL_SUCCESS'] . '

' . sprintf($lang['CLICK_RETURN_SMILEADMIN'], '', '') . '

' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '', '')); + } else { + $hidden_fields = ''; + $hidden_fields .= ''; + + print_confirmation([ + 'FORM_ACTION' => 'admin_smilies.php', + 'HIDDEN_FIELDS' => $hidden_fields, + ]); + } break; case 'edit': diff --git a/admin/admin_ug_auth.php b/admin/admin_ug_auth.php index b6914f4dd..7cef20864 100644 --- a/admin/admin_ug_auth.php +++ b/admin/admin_ug_auth.php @@ -20,9 +20,9 @@ $max_forum_name_length = 50; $yes_sign = '√'; $no_sign = 'x'; -$group_id = isset($_REQUEST['g']) ? (int)$_REQUEST['g'] : 0; -$user_id = isset($_REQUEST['u']) ? (int)$_REQUEST['u'] : 0; -$cat_id = isset($_REQUEST['c']) ? (int)$_REQUEST['c'] : 0; +$group_id = isset($_REQUEST[POST_GROUPS_URL]) ? (int)$_REQUEST[POST_GROUPS_URL] : 0; +$user_id = isset($_REQUEST[POST_USERS_URL]) ? (int)$_REQUEST[POST_USERS_URL] : 0; +$cat_id = isset($_REQUEST[POST_CAT_URL]) ? (int)$_REQUEST[POST_CAT_URL] : 0; $mode = isset($_REQUEST['mode']) ? (string)$_REQUEST['mode'] : ''; $submit = isset($_REQUEST['submit']); @@ -200,7 +200,7 @@ if ($mode == 'user' && (!empty($_POST['username']) || $user_id)) { 'CAT_HREF' => "$base_url&" . POST_CAT_URL . "=$c_id", )); - if (!$c =& $_REQUEST['c'] or !in_array($c, array('all', $c_id)) or empty($c_data['forums'])) { + if (!$c =& $_REQUEST[POST_CAT_URL] or !in_array($c, array('all', $c_id)) or empty($c_data['forums'])) { continue; } @@ -316,7 +316,7 @@ if ($mode == 'user' && (!empty($_POST['username']) || $user_id)) { 'CAT_HREF' => "$base_url&" . POST_CAT_URL . "=$c_id", )); - if (!($c =& $_REQUEST['c']) || !in_array($c, array('all', $c_id)) || empty($c_data['forums'])) { + if (!($c =& $_REQUEST[POST_CAT_URL]) || !in_array($c, array('all', $c_id)) || empty($c_data['forums'])) { continue; } diff --git a/admin/admin_user_search.php b/admin/admin_user_search.php index 4a29d0e06..f89f3f669 100644 --- a/admin/admin_user_search.php +++ b/admin/admin_user_search.php @@ -52,8 +52,8 @@ if (!isset($_REQUEST['dosearch'])) { } } - $language_list = \TorrentPier\Legacy\Select::language('', 'language_type'); - $timezone_list = \TorrentPier\Legacy\Select::timezone('', 'timezone_type'); + $language_list = \TorrentPier\Legacy\Common\Select::language('', 'language_type'); + $timezone_list = \TorrentPier\Legacy\Common\Select::timezone('', 'timezone_type'); $sql = 'SELECT f.forum_id, f.forum_name, f.forum_parent, c.cat_id, c.cat_title FROM ( ' . BB_FORUMS . ' AS f INNER JOIN ' . BB_CATEGORIES . ' AS c ON c.cat_id = f.cat_id ) diff --git a/admin/index.php b/admin/index.php index 0acf53868..ea3d0a2aa 100644 --- a/admin/index.php +++ b/admin/index.php @@ -15,12 +15,6 @@ if (!$stats = $datastore->get('stats')) { $stats = $datastore->get('stats'); } -// Files integrity check -if (!$files_integrity_data = $datastore->get('files_integrity')) { - $datastore->update('files_integrity'); - $files_integrity_data = $datastore->get('files_integrity'); -} - // Check for updates if (!$update_data = $datastore->get('check_updates')) { $datastore->update('check_updates'); @@ -88,16 +82,6 @@ if (isset($_GET['pane']) && $_GET['pane'] == 'left') { 'ADMIN_LOCK_CRON' => is_file(BB_DISABLED), ]); - // Files integrity check results - if (!empty($files_integrity_data)) { - $template->assign_block_vars('integrity_check', [ - 'INTEGRITY_SUCCESS' => (bool)$files_integrity_data['success'], - 'INTEGRITY_WRONG_FILES_LIST' => implode("\n\n
  • \n", $files_integrity_data['wrong_files']), - 'INTEGRITY_LAST_CHECK_TIME' => sprintf($lang['INTEGRITY_LAST_CHECK'], bb_date($files_integrity_data['timestamp'])), - 'INTEGRITY_CHECKED_FILES' => sprintf($lang['INTEGRITY_CHECKED'], $files_integrity_data['total_num'], ($files_integrity_data['total_num'] - $files_integrity_data['wrong_files_num'])), - ]); - } - // Check for updates if (isset($update_data['available_update'])) { $template->assign_block_vars('updater', [ diff --git a/admin/stats/tr_stats.php b/admin/stats/tr_stats.php index 591b675c6..4cd8733c3 100644 --- a/admin/stats/tr_stats.php +++ b/admin/stats/tr_stats.php @@ -39,7 +39,7 @@ foreach ($sql as $i => $query) { echo ''; echo '
    ';
     
    -echo 'gen time: ' . sprintf('%.4f', array_sum(explode(' ', microtime())) - TIMESTART) . " sec\n";
    +echo 'gen time: ' . sprintf('%.3f', array_sum(explode(' ', microtime())) - TIMESTART) . " sec\n";
     
     echo '
    '; echo ''; diff --git a/admin/stats/tracker.php b/admin/stats/tracker.php index 102436bcb..977856b4c 100644 --- a/admin/stats/tracker.php +++ b/admin/stats/tracker.php @@ -173,7 +173,7 @@ echo ''; echo !$client_full ? '

    Simple stats for clients are being cached for one hour.

    ' : ''; echo '
    ';
     
    -echo 'gen time: ' . sprintf('%.4f', array_sum(explode(' ', microtime())) - TIMESTART) . " sec\n";
    +echo 'gen time: ' . sprintf('%.3f', array_sum(explode(' ', microtime())) - TIMESTART) . " sec\n";
     echo '
    '; echo ''; diff --git a/ajax.php b/ajax.php index dad885165..abe638c8e 100644 --- a/ajax.php +++ b/ajax.php @@ -41,5 +41,5 @@ $ajax->exec(); /** * @deprecated ajax_common * Dirty class removed from here since 2.2.0 - * To add new actions see at src/Legacy/Ajax.php + * To add new actions see at src/Ajax.php */ diff --git a/bt/announce.php b/bt/announce.php index 1277db99b..438102009 100644 --- a/bt/announce.php +++ b/bt/announce.php @@ -13,7 +13,9 @@ require dirname(__DIR__) . '/common.php'; global $bb_cfg; -if (empty($_SERVER['HTTP_USER_AGENT'])) { +// Check User-Agent for existence +$userAgent = (string)$_SERVER['HTTP_USER_AGENT']; +if (empty($userAgent)) { header('Location: http://127.0.0.1', true, 301); die; } @@ -99,7 +101,7 @@ if (!isset($info_hash)) { * * @see https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/c64275f0b5dcb3c4c845d5204871adfe24f359d6/app/Http/Controllers/AnnounceController.php#L275 */ -$event = strtolower($event); +$event = strtolower((string)$event); if (!in_array($event, ['started', 'completed', 'stopped', 'paused', ''])) { msg_die('Invalid event: ' . $event); } @@ -151,7 +153,6 @@ if (!isset($left) || !is_numeric($left) || $left < 0) { * * @see https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/c64275f0b5dcb3c4c845d5204871adfe24f359d6/app/Http/Controllers/AnnounceController.php#L177 */ -$userAgent = (string)$_SERVER['HTTP_USER_AGENT']; if (strlen($userAgent) > 64) { msg_die('User-Agent must be less than 64 characters long'); } diff --git a/bt/includes/.htaccess b/bt/includes/.htaccess deleted file mode 100644 index b66e80882..000000000 --- a/bt/includes/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Require all denied diff --git a/cliff-releases.toml b/cliff-releases.toml new file mode 100644 index 000000000..ddef786ee --- /dev/null +++ b/cliff-releases.toml @@ -0,0 +1,125 @@ +# git-cliff ~ TorrentPier configuration file +# https://git-cliff.org/docs/configuration +# +# Lines starting with "#" are comments. +# Configuration options are organized into tables and keys. +# See documentation for more information on available options. + +[remote.github] +owner = "torrentpier" +repo = "torrentpier" + +[changelog] +# template for the changelog header +header = """ +[![TorrentPier](https://raw.githubusercontent.com/torrentpier/.github/refs/heads/main/versions/Cattle.png)](https://github.com/torrentpier)\n +""" +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{%- macro remote_url() -%} + https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }} +{%- endmacro -%} + +{%- macro nightly_url() -%} + https://nightly.link/{{ remote.github.owner }}/{{ remote.github.repo }}/workflows/build/master/TorrentPier +{%- endmacro -%} + +{% macro print_commit(commit) -%} + - {% if commit.scope %}*({{ commit.scope }})* {% endif %}\ + {% if commit.breaking %}[**breaking**] {% endif %}\ + {{ commit.message | upper_first }} - \ + ([{{ commit.id | truncate(length=7, end="") }}]({{ self::remote_url() }}/commit/{{ commit.id }}))\ +{% endmacro -%} + +{% if version %}\ + {% if previous.version %}\ + ## [{{ version }}]\ + ({{ self::remote_url() }}/compare/{{ previous.version }}..{{ version }}) ({{ timestamp | date(format="%Y-%m-%d") }}) + {% else %}\ + ## {{ version }} ({{ timestamp | date(format="%Y-%m-%d") }}) + {% endif %}\ +{% else %}\ + ## [nightly]({{ self::nightly_url() }}) +{% endif %}\ + +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | striptags | trim | upper_first }} + {% for commit in commits + | filter(attribute="scope") + | sort(attribute="scope") %} + {{ self::print_commit(commit=commit) }} + {%- endfor %} + {% for commit in commits %} + {%- if not commit.scope -%} + {{ self::print_commit(commit=commit) }} + {% endif -%} + {% endfor -%} +{% endfor -%} +{%- if github -%} +{% if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %} + ## New Contributors ❀️ +{% endif %}\ +{% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %} + * @{{ contributor.username }} made their first contribution + {%- if contributor.pr_number %} in \ + [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ + {%- endif %} +{%- endfor -%} +{%- endif %} + + +""" +# template for the changelog footer +footer = """ +""" +# remove the leading and trailing whitespace from the templates +trim = true +# postprocessors +postprocessors = [ + { pattern = '', replace = "https://github.com/torrentpier/torrentpier" }, # replace repository URL +] + +[git] +# parse the commits based on https://www.conventionalcommits.org +conventional_commits = true +# filter out the commits that are not conventional +filter_unconventional = true +# process each line of a commit as an individual commit +split_commits = false +# regex for preprocessing the commit messages +commit_preprocessors = [ + # Replace issue numbers + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/pull/${2}))" }, + # Check spelling of the commit with https://github.com/crate-ci/typos + # If the spelling is incorrect, it will be automatically fixed. + # { pattern = '.*', replace_command = 'typos --write-changes -' }, +] +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "πŸš€ Features" }, + { message = "^fix", group = "πŸ› Bug Fixes" }, + { message = "^doc", group = "πŸ“š Documentation" }, + { message = "^perf", group = "⚑ Performance" }, + { message = "^refactor", group = "🚜 Refactor" }, + { message = "^style", group = "🎨 Styling" }, + { message = "^test", group = "πŸ§ͺ Testing" }, + { message = "^ignore|^release", skip = true }, + { message = "^chore|^ci|^misc", group = "βš™οΈ Miscellaneous" }, + { body = ".*security", group = "πŸ›‘οΈ Security" }, + { message = "^revert", group = "◀️ Revert" }, + { message = "^crowdin", group = "🈳 New translations" }, # crowdin pulls supporting + { message = "^Composer", group = "πŸ“¦ Dependencies" }, # dependabot pulls supporting + { message = "^rem|^drop|^removed", group = "πŸ—‘οΈ Removed" }, + { message = ".*", group = "πŸ’Ό Other" }, +] +# protect breaking changes from being skipped due to matching a skipping commit_parser +protect_breaking_commits = false +# filter out the commits that are not matched by commit parsers +filter_commits = false +# regex for matching git tags +tag_pattern = "v[0-9].*" +# sort the tags topologically +topo_order = false +# sort the commits inside sections by oldest/newest order +sort_commits = "newest" diff --git a/cliff.toml b/cliff.toml index 3b513c7a7..a36ef6aab 100644 --- a/cliff.toml +++ b/cliff.toml @@ -63,12 +63,14 @@ body = """ ## New Contributors ❀️ {% endif %}\ {% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %} - * [@{{ contributor.username }}](https://github.com/{{ contributor.username }}) made their first contribution + * @{{ contributor.username }} made their first contribution {%- if contributor.pr_number %} in \ [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \ {%- endif %} {%- endfor -%} {%- endif %} + + """ # template for the changelog footer footer = """ diff --git a/composer.json b/composer.json index 2a4d1d02b..a15ef15cc 100644 --- a/composer.json +++ b/composer.json @@ -46,23 +46,23 @@ "forum": "https://torrentpier.com" }, "require": { - "php": "^8.1 | ^8.2 | ^8.3 | ^8.4", + "php": ">=8.1", "arokettu/random-polyfill": "1.0.2", "arokettu/bencode": "^4.1.0", "arokettu/monsterid": "dev-master", "arokettu/torrent-file": "^5.2.1", "bugsnag/bugsnag": "^v3.29.1", "claviska/simpleimage": "^4.0", + "belomaxorka/captcha": "1.*", "egulias/email-validator": "^4.0.1", "filp/whoops": "^2.15", "z4kn4fein/php-semver": "^v3.0.0", - "nemorize/indexnow": "^0.0.1", "gigablah/sphinxphp": "2.0.8", "google/recaptcha": "^1.3", "jacklul/monolog-telegram": "^3.1", "josantonius/cookie": "^2.0", "gemorroj/m3u-parser": "dev-master", - "php-curl-class/php-curl-class": "^11.0.0", + "php-curl-class/php-curl-class": "^12.0.0", "league/flysystem": "^3.28", "longman/ip-tools": "1.2.1", "matthiasmullie/scrapbook": "^1.5.4", @@ -73,7 +73,7 @@ "symfony/event-dispatcher": "^6.4", "symfony/mime": "^6.4", "symfony/mailer": "^6.4", - "symfony/polyfill": "v1.31.0", + "symfony/polyfill": "v1.32.0", "vlucas/phpdotenv": "^5.5" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 04f5fd99c..77676de8e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9024100c87e72c5ee811638607aa15f5", + "content-hash": "2acad3dafd9fd57bc8c26303df22dd15", "packages": [ { "name": "arokettu/bencode", @@ -144,12 +144,12 @@ "source": { "type": "git", "url": "https://github.com/arokettu/monsterid.git", - "reference": "de2873a5cf6f2ed7cf2c8709ee1bae0e6aec1ed8" + "reference": "4e7484a593c42eba960ee555877dd9b26577fe8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/arokettu/monsterid/zipball/de2873a5cf6f2ed7cf2c8709ee1bae0e6aec1ed8", - "reference": "de2873a5cf6f2ed7cf2c8709ee1bae0e6aec1ed8", + "url": "https://api.github.com/repos/arokettu/monsterid/zipball/4e7484a593c42eba960ee555877dd9b26577fe8a", + "reference": "4e7484a593c42eba960ee555877dd9b26577fe8a", "shasum": "" }, "require": { @@ -157,20 +157,26 @@ "arokettu/random-polyfill": "^1.0.1", "ext-gd": "*", "php": "^8.0", - "php-http/discovery": "^1.19", "psr/http-factory": "^1.0" }, "require-dev": { "arokettu/random-polyfill": ">= 1.0.1 < 1.99", "httpsoft/http-message": "^1.1", + "php-http/discovery": "^1.20", "phpunit/phpunit": ">= 7.0 < 10", "psy/psysh": "*", - "sandfox.dev/code-standard": "^1.2024.07.05", + "sandfox.dev/code-standard": "^1.2025.03.27", + "slim/psr7": "^1.7", "squizlabs/php_codesniffer": "*", - "vimeo/psalm": "^5.4" + "vimeo/psalm": "^5.4 || ^6.0" }, "default-branch": true, "type": "library", + "extra": { + "discovery": { + "psr/http-factory-implementation": "Arokettu\\MonsterID\\Tests\\Helpers\\HttpFactory" + } + }, "autoload": { "files": [ "src/functions.php" @@ -191,7 +197,7 @@ }, { "name": "Anton Smirnov", - "email": "sandfox@sandfox.me", + "email": "sandfox+composer@sandfox.me", "homepage": "https://sandfox.me/", "role": "maintainer" } @@ -203,11 +209,12 @@ "monsterid" ], "support": { + "chat": "https://gitter.im/arokettu/community", "docs": "https://monsterid.readthedocs.io/", "issues": "https://gitlab.com/sandfox/monsterid/-/issues", "source": "https://gitlab.com/sandfox/monsterid" }, - "time": "2024-10-13T00:45:20+00:00" + "time": "2025-04-03T13:37:00+00:00" }, { "name": "arokettu/random-polyfill", @@ -347,16 +354,16 @@ }, { "name": "arokettu/unsigned", - "version": "1.3.5", + "version": "1.3.6", "source": { "type": "git", "url": "https://github.com/arokettu/unsigned.git", - "reference": "559dd1247fb4bbc9d70a6ff8581d8e9fd742e096" + "reference": "1e5b3a131d669ee31c4d941bc27e4ba4ef64ae76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/arokettu/unsigned/zipball/559dd1247fb4bbc9d70a6ff8581d8e9fd742e096", - "reference": "559dd1247fb4bbc9d70a6ff8581d8e9fd742e096", + "url": "https://api.github.com/repos/arokettu/unsigned/zipball/1e5b3a131d669ee31c4d941bc27e4ba4ef64ae76", + "reference": "1e5b3a131d669ee31c4d941bc27e4ba4ef64ae76", "shasum": "" }, "require": { @@ -365,13 +372,16 @@ "require-dev": { "phpunit/phpunit": ">= 6.5 <10", "psy/psysh": "*", - "sandfox.dev/code-standard": "^1.2023.12.09", + "sandfox.dev/code-standard": "^1.2025.03.27", "squizlabs/php_codesniffer": "*" }, "type": "library", "autoload": { "files": [ "src/lib.php" + ], + "classmap": [ + "src/Unsigned.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -398,20 +408,90 @@ "issues": "https://gitlab.com/sandfox/unsigned/-/issues", "source": "https://gitlab.com/sandfox/unsigned" }, - "time": "2024-02-01T20:40:11+00:00" + "time": "2025-03-31T23:49:37+00:00" }, { - "name": "bugsnag/bugsnag", - "version": "v3.29.2", + "name": "belomaxorka/captcha", + "version": "v1.2.4", "source": { "type": "git", - "url": "https://github.com/bugsnag/bugsnag-php.git", - "reference": "437ac553e3dfb546b93a7191e031643b00da20f2" + "url": "https://github.com/belomaxorka/Captcha.git", + "reference": "db51723a9539b57ac3faff0211c117b4c55dbe23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bugsnag/bugsnag-php/zipball/437ac553e3dfb546b93a7191e031643b00da20f2", - "reference": "437ac553e3dfb546b93a7191e031643b00da20f2", + "url": "https://api.github.com/repos/belomaxorka/Captcha/zipball/db51723a9539b57ac3faff0211c117b4c55dbe23", + "reference": "db51723a9539b57ac3faff0211c117b4c55dbe23", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-mbstring": "*", + "php": ">=5.3.0", + "symfony/finder": "*" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6.4 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Gregwar\\": "src/Gregwar" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "GrΓ©goire Passault", + "email": "g.passault@gmail.com", + "homepage": "https://www.gregwar.com/", + "role": "Developer" + }, + { + "name": "Jeremy Livingston", + "email": "jeremy.j.livingston@gmail.com" + }, + { + "name": "belomaxorka", + "email": "roman25052006.kelesh@gmail.com", + "homepage": "https://belomaxorka.github.io/", + "role": "Developer" + } + ], + "description": "Captcha generator", + "homepage": "https://github.com/belomaxorka/Captcha", + "keywords": [ + "anti-bot", + "anti-spam", + "bot-protection", + "captcha", + "no-bot", + "obfuscation", + "security", + "spam", + "spam-protection" + ], + "support": { + "source": "https://github.com/belomaxorka/Captcha/tree/v1.2.4" + }, + "time": "2025-03-10T13:15:53+00:00" + }, + { + "name": "bugsnag/bugsnag", + "version": "v3.29.3", + "source": { + "type": "git", + "url": "https://github.com/bugsnag/bugsnag-php.git", + "reference": "9d9aa665f5e9d24f45aad5114dbd2d861119febb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bugsnag/bugsnag-php/zipball/9d9aa665f5e9d24f45aad5114dbd2d861119febb", + "reference": "9d9aa665f5e9d24f45aad5114dbd2d861119febb", "shasum": "" }, "require": { @@ -459,9 +539,9 @@ ], "support": { "issues": "https://github.com/bugsnag/bugsnag-php/issues", - "source": "https://github.com/bugsnag/bugsnag-php/tree/v3.29.2" + "source": "https://github.com/bugsnag/bugsnag-php/tree/v3.29.3" }, - "time": "2025-01-13T16:29:41+00:00" + "time": "2025-03-06T12:03:07+00:00" }, { "name": "claviska/simpleimage", @@ -518,16 +598,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.5.5", + "version": "1.5.6", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "08c50d5ec4c6ced7d0271d2862dec8c1033283e6" + "reference": "f65c239c970e7f072f067ab78646e9f0b2935175" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/08c50d5ec4c6ced7d0271d2862dec8c1033283e6", - "reference": "08c50d5ec4c6ced7d0271d2862dec8c1033283e6", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/f65c239c970e7f072f067ab78646e9f0b2935175", + "reference": "f65c239c970e7f072f067ab78646e9f0b2935175", "shasum": "" }, "require": { @@ -574,7 +654,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.5" + "source": "https://github.com/composer/ca-bundle/tree/1.5.6" }, "funding": [ { @@ -590,7 +670,7 @@ "type": "tidelift" } ], - "time": "2025-01-08T16:17:16+00:00" + "time": "2025-03-06T14:30:56+00:00" }, { "name": "doctrine/lexer", @@ -671,16 +751,16 @@ }, { "name": "egulias/email-validator", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "b115554301161fa21467629f1e1391c1936de517" + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517", - "reference": "b115554301161fa21467629f1e1391c1936de517", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", "shasum": "" }, "require": { @@ -726,7 +806,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.3" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" }, "funding": [ { @@ -734,20 +814,20 @@ "type": "github" } ], - "time": "2024-12-27T00:36:43+00:00" + "time": "2025-03-06T22:45:56+00:00" }, { "name": "filp/whoops", - "version": "2.16.0", + "version": "2.18.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", + "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", "shasum": "" }, "require": { @@ -797,7 +877,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.16.0" + "source": "https://github.com/filp/whoops/tree/2.18.0" }, "funding": [ { @@ -805,7 +885,7 @@ "type": "github" } ], - "time": "2024-09-25T12:00:00+00:00" + "time": "2025-03-15T12:00:00+00:00" }, { "name": "gemorroj/m3u-parser", @@ -813,21 +893,21 @@ "source": { "type": "git", "url": "https://github.com/Gemorroj/M3uParser.git", - "reference": "fcb37acd137a6e1d6aa2ef3745e1bc7a6e0b46e6" + "reference": "92fc0fe236d77e1b5a26c735ffcb6fc637eb298a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Gemorroj/M3uParser/zipball/fcb37acd137a6e1d6aa2ef3745e1bc7a6e0b46e6", - "reference": "fcb37acd137a6e1d6aa2ef3745e1bc7a6e0b46e6", + "url": "https://api.github.com/repos/Gemorroj/M3uParser/zipball/92fc0fe236d77e1b5a26c735ffcb6fc637eb298a", + "reference": "92fc0fe236d77e1b5a26c735ffcb6fc637eb298a", "shasum": "" }, "require": { "php": ">=8.0.2" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.46", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.6" + "friendsofphp/php-cs-fixer": "^3.73.1", + "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^9.6.22" }, "default-branch": true, "type": "library", @@ -853,9 +933,9 @@ ], "support": { "issues": "https://github.com/Gemorroj/M3uParser/issues", - "source": "https://github.com/Gemorroj/M3uParser/tree/master" + "source": "https://github.com/Gemorroj/M3uParser/tree/6.0.1" }, - "time": "2024-07-27T11:53:30+00:00" + "time": "2025-03-25T19:21:43+00:00" }, { "name": "gigablah/sphinxphp", @@ -1028,16 +1108,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.9.2", + "version": "7.9.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", "shasum": "" }, "require": { @@ -1134,7 +1214,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.2" + "source": "https://github.com/guzzle/guzzle/tree/7.9.3" }, "funding": [ { @@ -1150,20 +1230,20 @@ "type": "tidelift" } ], - "time": "2024-07-24T11:22:20+00:00" + "time": "2025-03-27T13:37:11+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.4", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", "shasum": "" }, "require": { @@ -1217,7 +1297,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.4" + "source": "https://github.com/guzzle/promises/tree/2.2.0" }, "funding": [ { @@ -1233,20 +1313,20 @@ "type": "tidelift" } ], - "time": "2024-10-17T10:06:22+00:00" + "time": "2025-03-27T13:27:01+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.0", + "version": "2.7.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", "shasum": "" }, "require": { @@ -1333,7 +1413,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.0" + "source": "https://github.com/guzzle/psr7/tree/2.7.1" }, "funding": [ { @@ -1349,20 +1429,20 @@ "type": "tidelift" } ], - "time": "2024-07-18T11:15:46+00:00" + "time": "2025-03-27T12:30:47+00:00" }, { "name": "jacklul/monolog-telegram", - "version": "3.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/jacklul/monolog-telegram.git", - "reference": "ec8674fbd280bbb369b5f48447259e44a92f39c8" + "reference": "1f2069f5556b1c8d6eb2d8b8ac29ff376675cf46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jacklul/monolog-telegram/zipball/ec8674fbd280bbb369b5f48447259e44a92f39c8", - "reference": "ec8674fbd280bbb369b5f48447259e44a92f39c8", + "url": "https://api.github.com/repos/jacklul/monolog-telegram/zipball/1f2069f5556b1c8d6eb2d8b8ac29ff376675cf46", + "reference": "1f2069f5556b1c8d6eb2d8b8ac29ff376675cf46", "shasum": "" }, "require": { @@ -1410,7 +1490,7 @@ "issues": "https://github.com/jacklul/monolog-telegram/issues", "source": "https://github.com/jacklul/monolog-telegram" }, - "time": "2023-11-21T18:26:36+00:00" + "time": "2025-01-24T18:07:58+00:00" }, { "name": "josantonius/cookie", @@ -1886,16 +1966,16 @@ }, { "name": "monolog/monolog", - "version": "3.8.1", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", "shasum": "" }, "require": { @@ -1973,7 +2053,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.1" + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" }, "funding": [ { @@ -1985,48 +2065,7 @@ "type": "tidelift" } ], - "time": "2024-12-05T17:15:07+00:00" - }, - { - "name": "nemorize/indexnow", - "version": "0.0.1", - "source": { - "type": "git", - "url": "https://github.com/nemorize/php-indexnow.git", - "reference": "7602a8ae1de0cf1dd11692a7627f10111c55731a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nemorize/php-indexnow/zipball/7602a8ae1de0cf1dd11692a7627f10111c55731a", - "reference": "7602a8ae1de0cf1dd11692a7627f10111c55731a", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^7.7", - "php": ">=8.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Nemorize\\Indexnow\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ji Yong, Kim", - "email": "nemo@qroffle.com" - } - ], - "description": "PHP library for submitting website URLs using IndexNow to search engines.", - "support": { - "issues": "https://github.com/nemorize/php-indexnow/issues", - "source": "https://github.com/nemorize/php-indexnow/tree/0.0.1" - }, - "time": "2023-07-31T17:08:12+00:00" + "time": "2025-03-24T10:02:05+00:00" }, { "name": "nikic/iter", @@ -2082,21 +2121,21 @@ }, { "name": "php-curl-class/php-curl-class", - "version": "11.0.1", + "version": "12.0.0", "source": { "type": "git", "url": "https://github.com/php-curl-class/php-curl-class.git", - "reference": "c8a7bc92f2337e634611eb127b5d269a243d2034" + "reference": "7a8f05efb18bb865dbce864b8fd34d4f5d920c74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-curl-class/php-curl-class/zipball/c8a7bc92f2337e634611eb127b5d269a243d2034", - "reference": "c8a7bc92f2337e634611eb127b5d269a243d2034", + "url": "https://api.github.com/repos/php-curl-class/php-curl-class/zipball/7a8f05efb18bb865dbce864b8fd34d4f5d920c74", + "reference": "7a8f05efb18bb865dbce864b8fd34d4f5d920c74", "shasum": "" }, "require": { "ext-curl": "*", - "php": ">=7.4" + "php": ">=8.0" }, "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "*", @@ -2156,88 +2195,9 @@ ], "support": { "issues": "https://github.com/php-curl-class/php-curl-class/issues", - "source": "https://github.com/php-curl-class/php-curl-class/tree/11.0.1" + "source": "https://github.com/php-curl-class/php-curl-class/tree/12.0.0" }, - "time": "2025-01-13T18:04:13+00:00" - }, - { - "name": "php-http/discovery", - "version": "1.20.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/discovery.git", - "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", - "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0|^2.0", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "nyholm/psr7": "<1.0", - "zendframework/zend-diactoros": "*" - }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/http-client-implementation": "*", - "psr/http-factory-implementation": "*", - "psr/http-message-implementation": "*" - }, - "require-dev": { - "composer/composer": "^1.0.2|^2.0", - "graham-campbell/phpspec-skip-example-extension": "^5.0", - "php-http/httplug": "^1.0 || ^2.0", - "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", - "sebastian/comparator": "^3.0.5 || ^4.0.8", - "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" - }, - "type": "composer-plugin", - "extra": { - "class": "Http\\Discovery\\Composer\\Plugin", - "plugin-optional": true - }, - "autoload": { - "psr-4": { - "Http\\Discovery\\": "src/" - }, - "exclude-from-classmap": [ - "src/Composer/Plugin.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "MΓ‘rk SΓ‘gi-KazΓ‘r", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", - "homepage": "http://php-http.org", - "keywords": [ - "adapter", - "client", - "discovery", - "factory", - "http", - "message", - "psr17", - "psr7" - ], - "support": { - "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.20.0" - }, - "time": "2024-10-02T11:20:13+00:00" + "time": "2025-03-25T18:04:16+00:00" }, { "name": "phpoption/phpoption", @@ -3185,16 +3145,16 @@ }, { "name": "symfony/mailer", - "version": "v6.4.13", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663" + "reference": "ada2809ccd4ec27aba9fc344e3efdaec624c6438" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", - "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ada2809ccd4ec27aba9fc344e3efdaec624c6438", + "reference": "ada2809ccd4ec27aba9fc344e3efdaec624c6438", "shasum": "" }, "require": { @@ -3245,7 +3205,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.13" + "source": "https://github.com/symfony/mailer/tree/v6.4.21" }, "funding": [ { @@ -3261,20 +3221,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-04-26T23:47:35+00:00" }, { "name": "symfony/mime", - "version": "v6.4.17", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ea87c8850a54ff039d3e0ab4ae5586dd4e6c0232" + "reference": "fec8aa5231f3904754955fad33c2db50594d22d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ea87c8850a54ff039d3e0ab4ae5586dd4e6c0232", - "reference": "ea87c8850a54ff039d3e0ab4ae5586dd4e6c0232", + "url": "https://api.github.com/repos/symfony/mime/zipball/fec8aa5231f3904754955fad33c2db50594d22d1", + "reference": "fec8aa5231f3904754955fad33c2db50594d22d1", "shasum": "" }, "require": { @@ -3330,7 +3290,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.17" + "source": "https://github.com/symfony/mime/tree/v6.4.21" }, "funding": [ { @@ -3346,20 +3306,20 @@ "type": "tidelift" } ], - "time": "2024-12-02T11:09:41+00:00" + "time": "2025-04-27T13:27:38+00:00" }, { "name": "symfony/polyfill", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill.git", - "reference": "c5ce28b35b2784b7b508aaa4447a6c3e39041e50" + "reference": "c4ee386e95ccdbea59cea802ea776d806319d506" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill/zipball/c5ce28b35b2784b7b508aaa4447a6c3e39041e50", - "reference": "c5ce28b35b2784b7b508aaa4447a6c3e39041e50", + "url": "https://api.github.com/repos/symfony/polyfill/zipball/c4ee386e95ccdbea59cea802ea776d806319d506", + "reference": "c4ee386e95ccdbea59cea802ea776d806319d506", "shasum": "" }, "require": { @@ -3382,6 +3342,7 @@ "symfony/polyfill-php82": "self.version", "symfony/polyfill-php83": "self.version", "symfony/polyfill-php84": "self.version", + "symfony/polyfill-php85": "self.version", "symfony/polyfill-util": "self.version", "symfony/polyfill-uuid": "self.version" }, @@ -3412,6 +3373,7 @@ "src/Intl/Icu/Resources/stubs", "src/Intl/MessageFormatter/Resources/stubs", "src/Intl/Normalizer/Resources/stubs", + "src/Php85/Resources/stubs", "src/Php84/Resources/stubs", "src/Php83/Resources/stubs", "src/Php82/Resources/stubs", @@ -3445,7 +3407,7 @@ ], "support": { "issues": "https://github.com/symfony/polyfill/issues", - "source": "https://github.com/symfony/polyfill/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill/tree/v1.32.0" }, "funding": [ { @@ -3461,7 +3423,7 @@ "type": "tidelift" } ], - "time": "2024-09-09T12:16:23+00:00" + "time": "2025-05-02T09:40:28+00:00" }, { "name": "symfony/service-contracts", @@ -3548,16 +3510,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.6.1", + "version": "v5.6.2", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", "shasum": "" }, "require": { @@ -3616,7 +3578,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2" }, "funding": [ { @@ -3628,7 +3590,7 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:52:34+00:00" + "time": "2025-04-30T23:37:27+00:00" }, { "name": "z4kn4fein/php-semver", @@ -3688,16 +3650,16 @@ "packages-dev": [ { "name": "symfony/var-dumper", - "version": "v6.4.15", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80" + "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80", - "reference": "38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/22560f80c0c5cd58cc0bcaf73455ffd81eb380d5", + "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5", "shasum": "" }, "require": { @@ -3753,7 +3715,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.15" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.21" }, "funding": [ { @@ -3769,7 +3731,7 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:28:48+00:00" + "time": "2025-04-09T07:34:50+00:00" } ], "aliases": [], @@ -3781,7 +3743,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.1 | ^8.2 | ^8.3 | ^8.4" + "php": ">=8.1" }, "platform-dev": [], "plugin-api-version": "2.3.0" diff --git a/data/uploads/.htaccess b/data/uploads/.htaccess deleted file mode 100644 index 6c4686a91..000000000 --- a/data/uploads/.htaccess +++ /dev/null @@ -1,3 +0,0 @@ -php_flag engine off -RemoveHandler .php .php5 .php4 .php3 .phtml .pl .asp -AddType text/plain .php .php .htm .html .phtml .pl .asp \ No newline at end of file diff --git a/filelist.php b/filelist.php index f9792c989..8e256dc67 100644 --- a/filelist.php +++ b/filelist.php @@ -23,7 +23,7 @@ if (!$topic_id) { bb_die($lang['INVALID_TOPIC_ID'], 404); } -$sql = 'SELECT t.attach_id, t.info_hash, t.info_hash_v2, t.size, ad.physical_filename +$sql = 'SELECT t.forum_id, t.attach_id, t.info_hash, t.info_hash_v2, t.size, ad.physical_filename FROM ' . BB_BT_TORRENTS . ' t LEFT JOIN ' . BB_ATTACHMENTS_DESC . ' ad ON t.attach_id = ad.attach_id @@ -34,6 +34,12 @@ if (!$row = DB()->fetch_row($sql)) { bb_die($lang['INVALID_TOPIC_ID_DB'], 404); } +// Check rights +$is_auth = auth(AUTH_ALL, $row['forum_id'], $userdata); +if (!$is_auth['auth_view']) { + bb_die($lang['SORRY_AUTH_VIEW_ATTACH'], 403); +} + // Protocol meta $meta_v1 = !empty($row['info_hash']); $meta_v2 = !empty($row['info_hash_v2']); diff --git a/group.php b/group.php index 237b12357..b674c823d 100644 --- a/group.php +++ b/group.php @@ -573,7 +573,7 @@ if (!$group_id) { $template->assign_block_vars('pending', [ 'ROW_CLASS' => $row_class, 'AVATAR_IMG' => $pending_info['avatar'], - 'USER' => profile_url($pending_info), + 'USER' => profile_url($member), 'FROM' => $pending_info['from'], 'JOINED' => $pending_info['joined'], 'JOINED_RAW' => $pending_info['joined_raw'], diff --git a/index.php b/index.php index 7598df5d7..bc96573ee 100644 --- a/index.php +++ b/index.php @@ -46,7 +46,7 @@ if ($bb_cfg['show_network_news']) { $user->session_start(); // Init main vars -$viewcat = isset($_GET['c']) ? (int)$_GET['c'] : 0; +$viewcat = isset($_GET[POST_CAT_URL]) ? (int)$_GET[POST_CAT_URL] : 0; $lastvisit = IS_GUEST ? TIMENOW : $userdata['user_lastvisit']; // Caching output @@ -80,6 +80,7 @@ $forum_name_html = $forums['forum_name_html']; $anon = GUEST_UID; $excluded_forums_csv = $user->get_excluded_forums(AUTH_VIEW); +$excluded_forums_array = $excluded_forums_csv ? explode(',', $excluded_forums_csv) : []; $only_new = $user->opt_js['only_new']; // Validate requested category id @@ -329,6 +330,10 @@ if ($bb_cfg['show_latest_news']) { $template->assign_vars(['SHOW_LATEST_NEWS' => true]); foreach ($latest_news as $news) { + if (in_array($news['forum_id'], $excluded_forums_array)) { + continue; + } + $template->assign_block_vars('news', [ 'NEWS_TOPIC_ID' => $news['topic_id'], 'NEWS_TITLE' => str_short($wordCensor->censorString($news['topic_title']), $bb_cfg['max_news_title']), @@ -348,6 +353,10 @@ if ($bb_cfg['show_network_news']) { $template->assign_vars(['SHOW_NETWORK_NEWS' => true]); foreach ($network_news as $net) { + if (in_array($net['forum_id'], $excluded_forums_array)) { + continue; + } + $template->assign_block_vars('net', [ 'NEWS_TOPIC_ID' => $net['topic_id'], 'NEWS_TITLE' => str_short($wordCensor->censorString($net['topic_title']), $bb_cfg['max_net_title']), diff --git a/info.php b/info.php index 83fa55f66..e47c3ef32 100644 --- a/info.php +++ b/info.php @@ -16,8 +16,9 @@ $user->session_start(); $info = []; $htmlDir = LANG_DIR . 'html/'; +$show = isset($_REQUEST['show']) ? (string)$_REQUEST['show'] : ''; -switch ((string)$_REQUEST['show'] ?? 'not_found') { +switch ($show) { case 'advert': $info['title'] = $lang['ADVERT']; $info['src'] = 'advert.html'; diff --git a/install.php b/install.php index ff42f895c..b095c8bd5 100644 --- a/install.php +++ b/install.php @@ -7,7 +7,7 @@ * @license https://github.com/torrentpier/torrentpier/blob/master/LICENSE MIT License */ -define('BB_ROOT', __DIR__ . '/'); +define('BB_ROOT', __DIR__ . DIRECTORY_SEPARATOR); // Check CLI mode if (php_sapi_name() !== 'cli') { @@ -185,7 +185,7 @@ if (!defined('EXTENSIONS_NOT_INSTALLED')) { if (is_file(BB_ROOT . '.env')) { out('- TorrentPier already installed', 'warning'); echo 'Are you sure want to re-install TorrentPier? [y/N]: '; - if (str_starts_with(mb_strtolower(readline()), 'y')) { + if (str_starts_with(mb_strtolower(trim(readline())), 'y')) { out("\n- Re-install process started...", 'info'); // environment if (is_file(BB_ROOT . '.env')) { @@ -257,6 +257,8 @@ if (!is_file(BB_ROOT . 'vendor/autoload.php')) { // Installing dependencies if (is_file(BB_ROOT . 'composer.phar')) { out('- Installing dependencies...', 'info'); + runProcess('php ' . BB_ROOT . 'composer.phar update --no-install'); + sleep(3); runProcess('php ' . BB_ROOT . 'composer.phar install --no-interaction --no-ansi'); define('COMPOSER_COMPLETED', true); } else { @@ -288,7 +290,7 @@ if (is_file(BB_ROOT . '.env.example') && !is_file(BB_ROOT . '.env')) { } // Editing ENV file -$DB_HOST = ''; +$DB_HOST = 'localhost'; $DB_PORT = 3306; $DB_DATABASE = ''; $DB_USERNAME = ''; @@ -309,20 +311,17 @@ if (is_file(BB_ROOT . '.env')) { if (trim($line) !== '' && !str_starts_with($line, '#')) { $parts = explode('=', $line, 2); $key = trim($parts[0]); - $value = (isset($parts[1]) && $key !== 'DB_PASSWORD') ? trim($parts[1]) : ''; - - // Database default values - if (in_array($key, ['DB_HOST', 'DB_PORT', 'DB_DATABASE', 'DB_USERNAME', 'DB_PASSWORD'])) { - $$key = $value; - } + $value = (!empty($parts[1]) && $key !== 'DB_PASSWORD') ? trim($parts[1]) : ''; out("\nCurrent value of $key: $value", 'debug'); echo "Enter a new value for $key (or leave empty to not change): "; - $newValue = readline(); + $newValue = trim(readline()); if (!empty($newValue) || $key === 'DB_PASSWORD') { $line = "$key=$newValue"; $$key = $newValue; + } else { + $$key = $value; } } @@ -418,5 +417,23 @@ if (!empty($DB_HOST) && !empty($DB_DATABASE) && !empty($DB_USERNAME)) { } } + // Cleanup... + if (is_file(BB_ROOT . '_cleanup.php')) { + out("\n--- Finishing installation (Cleanup) ---\n", 'info'); + out('The cleanup process will remove:'); + out('- Development documentation (README, CHANGELOG)', 'debug'); + out('- Git configuration files', 'debug'); + out('- CI/CD pipelines and code analysis tools', 'debug'); + out('- Translation and contribution guidelines', 'debug'); + echo 'Do you want to delete these files permanently? [y/N]: '; + if (str_starts_with(mb_strtolower(trim(readline())), 'y')) { + out("\n- Cleanup...", 'info'); + require_once BB_ROOT . '_cleanup.php'; + unlink(BB_ROOT . '_cleanup.php'); + } else { + out('- Skipping...', 'info'); + } + } + out("\n- Voila! Good luck & have fun!", 'success'); } diff --git a/install/.htaccess b/install/.htaccess deleted file mode 100644 index b66e80882..000000000 --- a/install/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Require all denied diff --git a/install/Caddyfile b/install/Caddyfile new file mode 100644 index 000000000..683d69994 --- /dev/null +++ b/install/Caddyfile @@ -0,0 +1,27 @@ +# Example Caddy configuration for TorrentPier + +example.com { + root * /path/to/root + encode gzip zstd + php_fastcgi unix//run/php/php-fpm.sock + try_files {path} {path}/ /index.php?{query} + file_server + + @blocked { + path /install/* /internal_data/* /library/* + path /.ht* /.en* + path /.git/* + path *.sql *.tpl *.db *.inc *.log *.md + } + respond @blocked 404 + + redir /sitemap.xml /sitemap/sitemap.xml + + @html_css_js { + path *.html *.css *.js *.json *.xml *.txt + } + header @html_css_js Content-Type "{mime}; charset=utf-8" +} + +# Refer to the Caddy docs for more information: +# https://caddyserver.com/docs/caddyfile diff --git a/install/nginx.conf b/install/nginx.conf new file mode 100644 index 000000000..49a407ba4 --- /dev/null +++ b/install/nginx.conf @@ -0,0 +1,39 @@ +# Example nginx configuration for TorrentPier + +server { + listen 80; # port + server_name example.com; # your domain + root /path/to/root; # folder with TorrentPier installed + index index.php; + charset utf-8; + + location / { + try_files \$uri \$uri/ /index.php?\$args; + } + + location ~ \/(install|internal_data|library)\/ { + return 404; + } + + location ~ /\.(ht|en) { + return 404; + } + + location ~ /\.git { + return 404; + } + + location ~ \.(.*sql|tpl|db|inc|log|md)$ { + return 404; + } + + rewrite ^/sitemap.xml$ /sitemap/sitemap.xml; + + location ~ \.php$ { + include fastcgi_params; + fastcgi_pass unix:/run/php/php-fpm.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; + include fastcgi_params; + } +} diff --git a/install/sql/mysql.sql b/install/sql/mysql.sql index 71d05fb14..23ed26841 100644 --- a/install/sql/mysql.sql +++ b/install/sql/mysql.sql @@ -600,8 +600,7 @@ VALUES ('allow_autologin', '1'), ('premod', '0'), ('tor_comment', '1'), ('terms', ''), - ('show_board_start_index', '1'), - ('tp_instance_hash', ''); + ('show_board_start_index', '1'); -- ---------------------------- -- Table structure for `bb_cron` @@ -1047,7 +1046,7 @@ CREATE TABLE IF NOT EXISTS `bb_privmsgs` ( `privmsgs_id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT, `privmsgs_type` TINYINT(4) NOT NULL DEFAULT '0', - `privmsgs_subject` VARCHAR(255) NOT NULL DEFAULT '0', + `privmsgs_subject` VARCHAR(255) NOT NULL DEFAULT '', `privmsgs_from_userid` MEDIUMINT(8) NOT NULL DEFAULT '0', `privmsgs_to_userid` MEDIUMINT(8) NOT NULL DEFAULT '0', `privmsgs_date` INT(11) NOT NULL DEFAULT '0', diff --git a/install/upgrade/legacy-changes.txt b/install/upgrade/legacy-changes.txt index b7fbc92e0..cb5dfa239 100644 --- a/install/upgrade/legacy-changes.txt +++ b/install/upgrade/legacy-changes.txt @@ -154,3 +154,4 @@ INSERT INTO `bb_config` VALUES ('magnet_links_for_guests', '0'); INSERT INTO `bb_config` VALUES ('tp_instance_hash', ''); // 2.4.5 +DELETE FROM `bb_config` WHERE `config_name` = 'tp_instance_hash'; diff --git a/internal_data/cache/.htaccess b/internal_data/cache/.htaccess deleted file mode 100644 index b66e80882..000000000 --- a/internal_data/cache/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Require all denied diff --git a/internal_data/cache/.keep b/internal_data/cache/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/internal_data/checksums.md5 b/internal_data/checksums.md5 deleted file mode 100644 index 3e1e55d5d..000000000 --- a/internal_data/checksums.md5 +++ /dev/null @@ -1,2516 +0,0 @@ -a587180b840ddbd809d484d6a497be3e .editorconfig -8254c9ebf60c663fa15eb561fdf07ee5 .env.example -36d3b3aca799b92f7947c930171a0e5c .gitignore -c7bd24be3c35a20f1fc7f03ee500c849 .htaccess -ca196b40306c9829c96ba5edc5e80ee4 .styleci.yml -683aab3cddafab5b54bdc84e4a3f3217 CHANGELOG.md -6a2bf79bd0d8d21a3aecedd2b01ca1f0 CODE_OF_CONDUCT.md -841804fee228e55e092e61cb3863ab5b CONTRIBUTING.md -687f1335db6db6ad3362d3a1879fba6e LICENSE -7d1fbd2cf9c953242d4d107fb3e97ff4 README.md -d3174ed5489a93b31b6a3453722b13fb SECURITY.md -1fc07cc69213361a496841c3da103fb5 ajax.php -461ea3b7ced792d1c8c45c81c354d6bd common.php -592b88a8ac54af8c50df2ea49b157be7 composer.json -bea5e2a0c7b1736ea2a67e3754bdd762 composer.lock -6f88f8fd7ea919ce4405b1d13797a88b cron.php -b25156919f61a6e0757690630fc12dc0 crowdin.yml -44a696a46fdfe30b53e83ed9bedf2d17 dl.php -6b3fdaad9e45f1a13b44a347ad8407d7 dl_list.php -befc1d6c813f54b136fe1a3116c08700 favicon.png -f8c5d65d67b73073b13a817cd7802167 feed.php -c324febb77c2dfc8602778cdac237ba2 filelist.php -d4b724d24dfc7f9fad19980c9ac7939b group.php -3a56da8ac4b23c51cdfc1e6b294c3fea group_edit.php -26cad2e89095faac4ffa0d0476091422 index.php -b7c2a779d76480f9826f885528cb3317 info.php -34b4a83bb1ea6dea95b81f27e44cd47f install.php -8080cf9a081ae72ec240d2802602294a login.php -90a3fe563f662127690ddf77f29c2bc8 memberlist.php -97ebcc4378c59d1f2902d30381f5c1e8 modcp.php -a236095124f2b70e0873f476ba49367f playback_m3u.php -8bda4dc5829359725bf31741885cb20f poll.php -c4c8ead9f4ec6ab5e909e1454c55b419 posting.php -255b917ace68c77f3c86a957a44032e3 privmsg.php -456c7cfb336277cbe006ee382f721552 profile.php -9ddd56c8356303b38ac57a9060c88a41 robots.txt -c4fe449f2180da3186407ed258fc5778 search.php -b0f25e35e7771939648fdf7f62b3502d techstack.md -b779bfa0782198624a9901ee308b29c1 techstack.yml -ec217a34611e15b8cfbc7f6940bfc8e4 terms.php -767593aedd946a298b552db798b2229f tracker.php -680fdae08b8526a88bcac1579cefb54a viewforum.php -c563433ed9c4df0dea6c6b95f82fe23c viewtopic.php -ae077429f1e67ab6789bee88dd62ed6a .github/FUNDING.yml -1fabb95a8a4be13d081e60bde06e06e6 .github/dependabot.yml -c4e532220d3fb2155db0a1b6b286352f .github/ISSUE_TEMPLATE/bug_report.md -ed2255072a8baff5cc6ef57448dcffc8 .github/ISSUE_TEMPLATE/feature_request.md -9400c868cb922e93048fe1fc31565b10 .github/workflows/phpmd.yml -8d66af50a3b6318eae266c06212b075c admin/admin_attach_cp.php -dd0ab6bea4bc9851ea8499e39dd03a5d admin/admin_attachments.php -97b57557f601f5ac7a7aabb74c887c55 admin/admin_board.php -91bba71575ae7ccdc625f88a63713f6a admin/admin_bt_forum_cfg.php -cc91592be3d1dcc14a15626a0219ce51 admin/admin_cron.php -725e20b3d53f80f77e177fca1370eb5a admin/admin_disallow.php -2f45f50893a93f146f034d5f8c69f7ca admin/admin_extensions.php -28cb680fcff43a3e284eb972446f3af9 admin/admin_forum_prune.php -7a1fd32f0eb53387d81abb6c4de9ed07 admin/admin_forumauth.php -b72e78e08d7ea1ad10d817dcc4face34 admin/admin_forumauth_list.php -8e17b40dacb91915589c51b188fdd816 admin/admin_forums.php -689d68a1c89eaef47512237b419ddd32 admin/admin_groups.php -b7576ae299f5baba8a16c532e2412fb1 admin/admin_log.php -8d2c5d862df0a18ab134263f8e4cf014 admin/admin_mass_email.php -bf4e6a343f7f1c9527e4bf105318bcb6 admin/admin_phpinfo.php -a3ad15fd34283236504d39a170246794 admin/admin_ranks.php -0d0887bd83c25af106623cbd9f758d04 admin/admin_rebuild_search.php -0f2b6a70b9a847785a5628aaef65b61a admin/admin_sitemap.php -d7867fd939c05bd1b5ef5279a123d6b0 admin/admin_smilies.php -612d6ccbee92eb2a4cdbf1c313887e6d admin/admin_terms.php -c871088157fe85736acf59a1e86215dd admin/admin_ug_auth.php -68e94837c804f9445ae39dbdb58e427a admin/admin_user_ban.php -544b8f885d47bf4e86638f069a0e1adc admin/admin_user_search.php -5bed0778d808152abac6edb0ead29701 admin/admin_words.php -2741f8e7f2b0172cac36f414f7dc23d6 admin/index.php -8c6b6828abc0018de20487ef7c4232de admin/pagestart.php -5796ab995ee4aa54b854fd33d5987a87 admin/stats/tr_stats.php -a11cdf5ae397b59e4c56f5c9bba41e4f admin/stats/tracker.php -db323d4667286871dcc5f146ebd94ea1 bt/announce.php -4a30dc08f5800e32d8d88984ba656748 bt/index.php -e89ce7276a6b7310a3d1b71a3b24ad96 bt/scrape.php -62745e850958bfd8a1fd77f90e74184b bt/includes/.htaccess -dc2bfff564919c8284323cd09a2d412d bt/includes/init_tr.php -9dc59527cb60c1ec76c53bd26337c4db data/avatars/gallery/bot.gif -aec061772e52bcee8706cafa04efa575 data/avatars/gallery/noavatar.png -c44fa3877e3b6e0cfe8f55bb0239a848 data/uploads/.htaccess -d41d8cd98f00b204e9800998ecf8427e data/uploads/thumbs/.keep -62745e850958bfd8a1fd77f90e74184b install/.htaccess -308a51248665e2aef9c138ad53faa07d install/sql/mysql.sql -f22be8fd0ca8b91c1203e1d40276015b install/sql/ocelot.sql -3104d0d535bed9e0d16a670c3473ad8f install/upgrade/legacy-changes.txt -7aa05f58eb49de63acc9102a3ece34c9 internal_data/checksums.md5 -d41d8cd98f00b204e9800998ecf8427e internal_data/atom/.keep -62745e850958bfd8a1fd77f90e74184b internal_data/cache/.htaccess -62745e850958bfd8a1fd77f90e74184b internal_data/log/.htaccess -d41d8cd98f00b204e9800998ecf8427e internal_data/triggers/$on -62745e850958bfd8a1fd77f90e74184b internal_data/triggers/.htaccess -d13b6a3a3b19e431e09502d69c47927e library/config.php -cefc75f518240d538fba7b01102cce08 library/defines.php -14bb972e01150ce90e37a280799b0312 library/ajax/avatar.php -b6e05ce2fee1d3c23abd47d811217cb0 library/ajax/callseed.php -19fdb09b0016acddaba0bd70d970baf1 library/ajax/change_tor_status.php -42e4ed25c8765790dc770d12cd9f31d1 library/ajax/change_torrent.php -7305d6fc162b392bddfe47acdb3a6413 library/ajax/change_user_opt.php -1dca1ab1d4a1608719f091a757118fe7 library/ajax/change_user_rank.php -b51fc6fc96e40739cc08e701c91dd0a8 library/ajax/edit_group_profile.php -06359df3c9e931ecd75fad9030bbf8b0 library/ajax/edit_user_profile.php -8970466c31cc5875ac0ab5aba5d19824 library/ajax/ffprobe_info.php -328514eff0417c9de3fb7aa92a860681 library/ajax/group_membership.php -a2b4668b8a7f0f67d8d84acc6b7130bf library/ajax/index_data.php -b206eaa54d57597a1406b5614c1296ca library/ajax/manage_admin.php -a720b7192f4071cc240c0d761ce6e5c2 library/ajax/manage_user.php -fa78c6f112e030aa0f0884496ff9c5f1 library/ajax/mod_action.php -1c770be060160527c91f7c34d71ac946 library/ajax/passkey.php -7c520b473a85d32705173baabf5dd446 library/ajax/post_mod_comment.php -b5f39ac1e2b4e6ba6a7fc199d9b26ff2 library/ajax/posts.php -8cf4d04925e1adfa0c06a742047027ee library/ajax/sitemap.php -9b47acce4962ab60d4a70a3fa81d84cd library/ajax/thanks.php -cea29378d86c0b872b6e491e35140ab7 library/ajax/topic_tpl.php -d7667c4d8908c037e0472b295261c74d library/ajax/user_register.php -ca52920e2cb5ea73d0f1f18334914f83 library/ajax/view_post.php -30a00ddb8c4d11515df402f4158cd655 library/ajax/view_torrent.php -62745e850958bfd8a1fd77f90e74184b library/attach_mod/.htaccess -39bc89b5860727ac46e4bbc93b98c69f library/attach_mod/attachment_mod.php -42920b6904a4e28912c992a8171b6433 library/attach_mod/displaying.php -d44254bbd4062404c4e3c4c9a872688a library/attach_mod/displaying_torrent.php -e97890109d97f06ca75f5f1e49e3a83e library/attach_mod/posting_attachments.php -4e08663bd734c1f5579d90ca87e8f4a3 library/attach_mod/includes/functions_admin.php -7713a50c49bbe5141befec994e5876d5 library/attach_mod/includes/functions_attach.php -05c41b3da5f34a90efe9656c43fbda8c library/attach_mod/includes/functions_delete.php -573a8492a267078ca1bc60a69d0b0b17 library/attach_mod/includes/functions_includes.php -7f529e18e356ce3fc55b61ebae759169 library/attach_mod/includes/functions_selects.php -f7ae1cfae8281a6f741906e37a051960 library/attach_mod/includes/functions_thumbs.php -62745e850958bfd8a1fd77f90e74184b library/includes/.htaccess -46dc6eea41671cf09193376eb01af844 library/includes/bbcode.php -1e6a43580132514e6fa3b617e5c43574 library/includes/functions.php -859d3edc99b7ddc8c40c30c49d5cdc0f library/includes/init_bb.php -e4b4a034ef8466a19ad98680a11597ba library/includes/online_userlist.php -b65bb58bb61b21f8cafea9d704df3bf8 library/includes/page_footer.php -1758d5ca45a45f3f263d7ca7567ebe8f library/includes/page_footer_dev.php -721cdc31e15616e3e857e5fce6cfe85d library/includes/page_header.php -9518fe22de5a4b0581c991a1781fa165 library/includes/posting_tpl.php -b1bf7d93ecd54fb2f0a89b34a49e3abf library/includes/torrent_announce_urls.php -1fc8f834aec903ad7d289231ce0a29b0 library/includes/torrent_show_dl_list.php -4a64535aec22773e257bab4381ab9aba library/includes/cron/cron_check.php -3aefd57859195a47112a4f182e05ffa6 library/includes/cron/cron_run.php -728a14636bc7533458738cc10343a085 library/includes/cron/jobs/attach_maintenance.php -b262557d5d5f992cec814c92e153c56a library/includes/cron/jobs/board_maintenance.php -7cf3df9f0a94214e99400b12c0db14ed library/includes/cron/jobs/clean_dlstat.php -07c3507fb771b53f018fe14fd47ece6f library/includes/cron/jobs/clean_log.php -021ba0a1e6b871d650700262f7190b58 library/includes/cron/jobs/clean_pm.php -4746b70421c4711a1dc5b6838c73d29c library/includes/cron/jobs/clean_search_results.php -aa64808a8e4400921a040764b35c2ba7 library/includes/cron/jobs/demo_mode.php -031b3ebc8a320996959cf6272e2add1b library/includes/cron/jobs/ds_update_cat_forums.php -4b024656b2c71a2169426fe60a279601 library/includes/cron/jobs/ds_update_stats.php -e778e095e2b393bc83d51d0fad3445e5 library/includes/cron/jobs/flash_topic_view.php -3bb43e336312ad565a53812046ce7497 library/includes/cron/jobs/prune_forums.php -2ecaabbcf3cc7f6470d97466e904c65c library/includes/cron/jobs/prune_inactive_users.php -d90ec56a63146fd0b64ef29b66ed8eb8 library/includes/cron/jobs/prune_topic_moved.php -b79360730ce2c35e2a9a3bee3fc073b3 library/includes/cron/jobs/sessions_cleanup.php -545ca1797d99541173edb3407c7f6749 library/includes/cron/jobs/sitemap.php -7a562cf331c22300aa17d9372a4c0864 library/includes/cron/jobs/tr_cleanup_and_dlstat.php -a92becfbe0ca2ad92399d95771bd8c2a library/includes/cron/jobs/tr_complete_count.php -98cf1155450c51c90acc96f149eaf373 library/includes/cron/jobs/tr_maintenance.php -e5b68562df55accd7f628d15a7fc15dd library/includes/cron/jobs/tr_make_snapshot.php -e78403f673d26fc81e10ebb2b3644295 library/includes/cron/jobs/tr_seed_bonus.php -e22e29151bcfc6ed2feaabeb94a8e43c library/includes/cron/jobs/tr_update_seeder_last_seen.php -fc508d151199c26c5aaef14374325d4c library/includes/cron/jobs/update_forums_atom.php -0887b85beaa1abbbe92656f405af9a65 library/includes/datastore/build_attach_extensions.php -b797a078726c99dee38109af6464c99d library/includes/datastore/build_bans.php -d127f7a04e28bbaec862d9f060036d67 library/includes/datastore/build_cat_forums.php -1c8f4f04c19bf39f9b1ff2514bb24987 library/includes/datastore/build_censor.php -d94fd96ee7434d1d93fc11be20d23a28 library/includes/datastore/build_check_updates.php -0badc8afa821057f6ba9d3ff9dc36384 library/includes/datastore/build_files_integrity.php -7643e43da69353fe2dbf46b1b22b572c library/includes/datastore/build_moderators.php -dd7b6ee11512214f5ff074af38f0c264 library/includes/datastore/build_ranks.php -7e82aa5f7767f941c082ad8f8d702e00 library/includes/datastore/build_smilies.php -d4f88fd2c2c54c04c75781b9ff0a17e5 library/includes/datastore/build_stats.php -26fa0a0bb0f21cb60cf7a41d8257ff43 library/includes/ucp/activate.php -a2a394682758f3366e1507df25271969 library/includes/ucp/bonus.php -0b4d367a0bca43e8cf281bb240a52791 library/includes/ucp/email.php -b4f99b7b3251cc8b8c9dc973f3f671cc library/includes/ucp/register.php -edfb569a6753ab56168a1e89b1980fa2 library/includes/ucp/sendpasswd.php -397bebde423895a376e481d211cfc192 library/includes/ucp/topic_watch.php -068b3679e8015153c729bb3df96a7e9e library/includes/ucp/viewprofile.php -f9fa8d076453d5e0e571eae07f6eea52 library/includes/ucp/viewtorrent.php -35246b96f353102ee208ae6accf2103e library/language/af/main.php -d5296871bcd87b4b63282ab39adb1e95 library/language/af/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/af/email/blank.html -1fff1b68aec9c7a904e61212f43c03f0 library/language/af/email/group_added.html -28f7d5aa612839b39145a55c96601560 library/language/af/email/group_approved.html -7ff101143ea8c70372950bec412d672d library/language/af/email/group_request.html -e9a89e8f4b86dd834ac0d8b0bf623b7a library/language/af/email/privmsg_notify.html -ab4313a1a7820c8980490fd4341ad76a library/language/af/email/profile_send_email.html -42476144ed47d9073ed64c46a74d8a2e library/language/af/email/topic_notify.html -789bc8a32fc1575b0ba7a78c5347225d library/language/af/email/user_activate.html -ba6ecb0f3147edaa01c35dbfb9e069e0 library/language/af/email/user_activate_passwd.html -adbecd97734754b088cf44ac9e316cf7 library/language/af/email/user_welcome.html -e236b59b8741d8c01ec99fd469e89bf3 library/language/af/email/user_welcome_inactive.html -6191d3d0aa17aa8046818e83d87d5118 library/language/af/html/advert.html -4a682d69fd46bfd6579a1789a944beb2 library/language/af/html/copyright_holders.html -2bdd1078f8985b71e76882870cc83371 library/language/af/html/not_found.html -1a1cc8023f5debf45e36984dd8cb1263 library/language/af/html/sidebar1.html -2ab652f0df01da43de1cd8ef9842e270 library/language/af/html/sidebar2.html -2750438cd15dfabfd612cf4c54e83df5 library/language/af/html/user_agreement.html -40a8c47b20f33d4ff06bc3f96c928070 library/language/ar/main.php -fa521d2c2157552091a553aaec36dd6f library/language/ar/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/ar/email/blank.html -43e96b28acf99b4b7120d7ce19502950 library/language/ar/email/group_added.html -afa1f11137c58385f843e97280e88c6a library/language/ar/email/group_approved.html -98373eec63906c056282c15ddfcd4898 library/language/ar/email/group_request.html -34368da994535c976c531cf224b94126 library/language/ar/email/privmsg_notify.html -2c88cbdca229325834f370fa9d9df539 library/language/ar/email/profile_send_email.html -d67135d1fbf312d20103271b59c77bc6 library/language/ar/email/topic_notify.html -17d590c397d72b258f70a3555420e585 library/language/ar/email/user_activate.html -d2c78379f8a43cc1c9af21231853f189 library/language/ar/email/user_activate_passwd.html -4403d35496382430c8ace409750440f3 library/language/ar/email/user_welcome.html -b81b7f55ce6936f54d0ecfe6e39c9380 library/language/ar/email/user_welcome_inactive.html -5927bab3295e933af0868d9a19cc1b82 library/language/ar/html/advert.html -f3f1133a129b25444951c0327d446848 library/language/ar/html/copyright_holders.html -9717efaa12d5528b02f9d5d83c101d3c library/language/ar/html/not_found.html -419cae345f18e51b0ebc340420d7054b library/language/ar/html/sidebar1.html -2f6a89bbd0b68cd4bc88d5b505d464dd library/language/ar/html/sidebar2.html -1de04f80a18d5e240c3caa3ed27936e9 library/language/ar/html/user_agreement.html -c27ae368a78f7533baa864adab407890 library/language/az/main.php -86864d262873ce97aafa166f21816e36 library/language/az/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/az/email/blank.html -dd80eef9f4ae2645d8e9241217f56305 library/language/az/email/group_added.html -a631c44125f656e25638c1f1aedcc19f library/language/az/email/group_approved.html -6e6998323f25df3294b2a320511e5292 library/language/az/email/group_request.html -c400127f6fac027aa62b32300b08566b library/language/az/email/privmsg_notify.html -e32c7225fecdc43d164da9c906282b94 library/language/az/email/profile_send_email.html -f1e9620de7a17b3fdae624d213f9455b library/language/az/email/topic_notify.html -5342f8247f0bd9c18c0073781265eaca library/language/az/email/user_activate.html -8b2c2c0439787a16d264f23890eb59e8 library/language/az/email/user_activate_passwd.html -14156b684e46fa9957ce815c9cc04f93 library/language/az/email/user_welcome.html -a3f8558e9e4a43bf5dcf662d4fb41ecc library/language/az/email/user_welcome_inactive.html -ecee561941ed74758a65213574603f19 library/language/az/html/advert.html -e92b30e3f68b9a4c91591ac5a15a0812 library/language/az/html/copyright_holders.html -527a74e40c96a2daa22c18d12775440f library/language/az/html/not_found.html -63241c2dfc3eb13353faf2b24d1eb84b library/language/az/html/sidebar1.html -3dbe45cccbc81ff0e3de4c122ccc4a71 library/language/az/html/sidebar2.html -e02aea3381d68370dfcaff206745c0b2 library/language/az/html/user_agreement.html -b3737c4136ac58118dd5c9daf520bce0 library/language/be/main.php -9b2ba7b5ebcd333f2b822fc7044f5bcb library/language/be/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/be/email/blank.html -4bae4a646586b292928b006a0bf5432c library/language/be/email/group_added.html -20b3f2765ca052505948666ab2a1570b library/language/be/email/group_approved.html -9e9d2b46fe2069e909798553ffc93199 library/language/be/email/group_request.html -9bc4f5f831dca47cae788366c787d2f8 library/language/be/email/privmsg_notify.html -a042a5ef9a4345d98e6b4deddc2e85e9 library/language/be/email/profile_send_email.html -db9d1c841e1427aba86ded17373b8045 library/language/be/email/topic_notify.html -b22b814dab05b0281582f4b7b4ccb2a4 library/language/be/email/user_activate.html -0982001eb55a2d54d954662abcdb96bf library/language/be/email/user_activate_passwd.html -61c55933e6f01e8a28521cc6a0b5f3ea library/language/be/email/user_welcome.html -7466f13845a1dcfa2df68c02c776aa9a library/language/be/email/user_welcome_inactive.html -e73cfad2708bdea88dafae5908fdbf88 library/language/be/html/advert.html -db21ab7a6caacf8b252cde9c71445e4d library/language/be/html/copyright_holders.html -57d580ace737d5b995f68c56a792ed19 library/language/be/html/not_found.html -c5c25d3ed02a42fc680ce0c9e31d9833 library/language/be/html/sidebar1.html -e5cd1e96f4ff1d3b125af6e58463af83 library/language/be/html/sidebar2.html -7fc955c9c4e1b6145fa2adfc8620a10e library/language/be/html/user_agreement.html -e84cfbb8877d0ec5b4221e733ef0d6a9 library/language/bg/main.php -82ae13a7c21b8ee69f022165f63bcccf library/language/bg/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/bg/email/blank.html -72e0f97341e3dbb98860c2fad79a324b library/language/bg/email/group_added.html -b32251b9dbbd5e75418e430eafefeca4 library/language/bg/email/group_approved.html -09be3cb37c3f8e8b815073554f8e5315 library/language/bg/email/group_request.html -0187481b1243b0b4950fa895ff7d0b4a library/language/bg/email/privmsg_notify.html -0cfcb72dfa7544978fdebd29c2e2b55b library/language/bg/email/profile_send_email.html -87f5c5fa7451a7ad05a182d7d3f42f6c library/language/bg/email/topic_notify.html -1f52da5fbf1d9974bebf90cdfc2ecb0c library/language/bg/email/user_activate.html -fc28c2d7a20e5de767ef3f43f71f8bce library/language/bg/email/user_activate_passwd.html -754366976b211c1d3a0977c2e0b9bfa2 library/language/bg/email/user_welcome.html -5955fb11d3d53178680bb4c035787ee1 library/language/bg/email/user_welcome_inactive.html -b569ecb5d53580f5c69a11f8a9e930e1 library/language/bg/html/advert.html -8c994f141f3965049dfe2f7431e54429 library/language/bg/html/copyright_holders.html -57e83b4855ea6048c133879008275a6b library/language/bg/html/not_found.html -c38a63ddc15f3fae33bd6f5d548e7cd1 library/language/bg/html/sidebar1.html -c26acd4e7e6bfb4b3ea9aa6afe1365c6 library/language/bg/html/sidebar2.html -0b1cb9964e3a075100d47a6fffa8ed08 library/language/bg/html/user_agreement.html -66517e6ba8fb3608792def74fddc1a76 library/language/bs/main.php -e3fca85d3774a0c2e801376be90ae7e8 library/language/bs/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/bs/email/blank.html -c1e0c28fbfd6e2239db44a17a745fa82 library/language/bs/email/group_added.html -c3b53ad5fdaf2b3028a1b6589646380d library/language/bs/email/group_approved.html -e78c805ac4a5d53639558d2ea8d5cb5b library/language/bs/email/group_request.html -4c143478ca52fd4299cde8579872f9f4 library/language/bs/email/privmsg_notify.html -d605c11a388d611573061e13a9ae32bd library/language/bs/email/profile_send_email.html -9f274d4964c9645d2efa7ccf5683c206 library/language/bs/email/topic_notify.html -23c18dcf3c714fa20cb1b4af2720c9f6 library/language/bs/email/user_activate.html -d1e65fef3ae87fd3a3362f8097c53ad1 library/language/bs/email/user_activate_passwd.html -ced77651e1a03da519f4c332db52e7af library/language/bs/email/user_welcome.html -2e5eaa4c9dccb542fca2a509a26ddac8 library/language/bs/email/user_welcome_inactive.html -e694c1f242cbbfa12fd7c3403d2c00ec library/language/bs/html/advert.html -86a17c7c634b7417a43677decdd99341 library/language/bs/html/copyright_holders.html -bb507442da349d94ff69dd17f9e50501 library/language/bs/html/not_found.html -eba4312d0f40171a1c0b769c84a5b3e3 library/language/bs/html/sidebar1.html -c0506bffc50a613839c5ace0375bab15 library/language/bs/html/sidebar2.html -0af817ff093e1b5074ee0298cfa44aed library/language/bs/html/user_agreement.html -fa1b3f1bacb3405fc68fa5889d3b75d1 library/language/ca/main.php -c988c0fa1f3cbfdcdd2f31697ce08446 library/language/ca/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/ca/email/blank.html -f6655bb55af5684a9b20e0f2a765bdcc library/language/ca/email/group_added.html -399164a98440f31188b0995ecd22ed9f library/language/ca/email/group_approved.html -26d18454d71328db4d900e4fb03c9a90 library/language/ca/email/group_request.html -a49e4b3d56b4e50892af1b687d3753b7 library/language/ca/email/privmsg_notify.html -95118413d642495033c79cdee2ec9faf library/language/ca/email/profile_send_email.html -1d1a0a66b944c8d66bb4f8d2f9aaa2b3 library/language/ca/email/topic_notify.html -0bea535d5d003f2d69c7a613d493aa2e library/language/ca/email/user_activate.html -75ac6789feb0606c46a775db0f3d8046 library/language/ca/email/user_activate_passwd.html -f5d938273c2e6c108fd338128bfb39cc library/language/ca/email/user_welcome.html -f782747a0c0092c5551ee612f18f2e0d library/language/ca/email/user_welcome_inactive.html -24b31ef41aa454619095d124b260941f library/language/ca/html/advert.html -d842cc53d1a7396fe9689aaff1db81f9 library/language/ca/html/copyright_holders.html -9a101a483cce73b588631667cdf669be library/language/ca/html/not_found.html -e1a3441aa24f19e520920a2f6e783dc7 library/language/ca/html/sidebar1.html -ef561114e5c474d8b4670013c3856132 library/language/ca/html/sidebar2.html -c95f93aa1423fbb6e632399ff6057e32 library/language/ca/html/user_agreement.html -efc5e9ce37b0e0128a6064620a06a5e0 library/language/cs/main.php -a6172e22acc9c1c578af12d7d30cf9d0 library/language/cs/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/cs/email/blank.html -7f485b624d5c01fda272b6172ba6df03 library/language/cs/email/group_added.html -7af4655e97cf45d896d753b46c764fe2 library/language/cs/email/group_approved.html -ba60b416b0e3798f20cb9eb266035d88 library/language/cs/email/group_request.html -094d43a6c65b7fdcb7fac4640b64e7d9 library/language/cs/email/privmsg_notify.html -55e181c5b5581ab127d87e030c56ec64 library/language/cs/email/profile_send_email.html -0dc36c82b4751b42a1b7abb2b51d29d4 library/language/cs/email/topic_notify.html -3ab0fb0644d3c30477f0c00d83da281b library/language/cs/email/user_activate.html -2ee3180e4ef57b75316348ea5c0d3c61 library/language/cs/email/user_activate_passwd.html -98338114f59f8e11e379c7bfdae9cca6 library/language/cs/email/user_welcome.html -1d9489abff11c860eaaaf5aedd3fe381 library/language/cs/email/user_welcome_inactive.html -a8a903afdbdb8573d47b61b9e39bd434 library/language/cs/html/advert.html -113efaa17e2c437bd7b476457907c765 library/language/cs/html/copyright_holders.html -231e22bd1d157a59189ff7c948a5889e library/language/cs/html/not_found.html -a5888c87a5c682036243f8c6f8f02fa8 library/language/cs/html/sidebar1.html -c85ae20c41caf7ff4e304903f971a5ae library/language/cs/html/sidebar2.html -5acb3c285708e0301f1e7eb120389124 library/language/cs/html/user_agreement.html -ccf3e8dfbd6c8fca08eaf0813beb2ecb library/language/da/main.php -08183a66ce81c5f02e4b103285acac4c library/language/da/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/da/email/blank.html -9e2616bffb8b80f94974080736953cd7 library/language/da/email/group_added.html -f2e59e4941ebd9d157135f1fe0348d8f library/language/da/email/group_approved.html -20bdcb8dc349bc17fd98bff1cb9d9ebb library/language/da/email/group_request.html -27a67c8327dc87c8eb773b25c7ceb469 library/language/da/email/privmsg_notify.html -d61eb80688903c111450012e65d535eb library/language/da/email/profile_send_email.html -6a6c034553fc857d3fad7850507422f5 library/language/da/email/topic_notify.html -b5191236f0dc2e552711e28bd2b31797 library/language/da/email/user_activate.html -1fc4fd62a2b3fe0de15750c9b9d9e1b6 library/language/da/email/user_activate_passwd.html -b6d2436a7a4bc08e8844e869ec033a89 library/language/da/email/user_welcome.html -a64b1bc65756fb97c50401c576716117 library/language/da/email/user_welcome_inactive.html -254767ac6b336372ec2e6a79dec5c2d5 library/language/da/html/advert.html -c81c5d0cedb426f978957b834de68c8b library/language/da/html/copyright_holders.html -0173aea68d0771792563650671230911 library/language/da/html/not_found.html -cb40fcef19c703459631c80785b31c32 library/language/da/html/sidebar1.html -91b6f838ee872289580b78505a03838e library/language/da/html/sidebar2.html -70e7f089b7946900bb4798170f9099ee library/language/da/html/user_agreement.html -28413d0ebaf875f5c6cde4b99e733c5f library/language/de/main.php -3019ff68daf2326f06536d4ff1079345 library/language/de/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/de/email/blank.html -694f61b664603ee3cda07269f166b6e6 library/language/de/email/group_added.html -17fe22851aa16c535fc213f7f3bc583d library/language/de/email/group_approved.html -3c749e3b28625c4905f1f0bc4bd10b96 library/language/de/email/group_request.html -cc093206ebe1deaa2c8fc2d2284acf16 library/language/de/email/privmsg_notify.html -ce34b901872ba0f5d3580cdc8617f1eb library/language/de/email/profile_send_email.html -962f2fc55e8e8c636c99f617f8ef3c7d library/language/de/email/topic_notify.html -982764ad6b521ca8b1096ca504edeede library/language/de/email/user_activate.html -532723fe40997c7b5cc3e7cff2281fdd library/language/de/email/user_activate_passwd.html -58b5e074743e626d86d181ebbb3fcda9 library/language/de/email/user_welcome.html -27d4df602b91aace2bd64926586c71cc library/language/de/email/user_welcome_inactive.html -c0f85b389d03a1c3ff8692757fec20ea library/language/de/html/advert.html -dffa36be5d1c6250a93fd41a67c40a28 library/language/de/html/copyright_holders.html -322e9d1e37b3405351ea9193d951fbc4 library/language/de/html/not_found.html -795139660ac65dfc4067ba5e47731e10 library/language/de/html/sidebar1.html -998e5f2563ecdec12e0627e03ab3f1bd library/language/de/html/sidebar2.html -cdea09f60483238475a91332312ee379 library/language/de/html/user_agreement.html -5e5143c3167fb11e44d371b14df413a6 library/language/el/main.php -574ce916932062b0ac917166be8adc1f library/language/el/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/el/email/blank.html -da343371dfc03ae4cf6386325b345840 library/language/el/email/group_added.html -464b5c5fb85d998d4d84aa8c6614f6ee library/language/el/email/group_approved.html -4257348c0293b9b88cc4a0a62355573c library/language/el/email/group_request.html -8ee533fd7cf78126016fa1c1869ba6b0 library/language/el/email/privmsg_notify.html -d8e56518fd6ddbd14c47452e63682530 library/language/el/email/profile_send_email.html -5a97b67bb7e1fd57e7843d92a798475b library/language/el/email/topic_notify.html -64fd3a1a96c917f9f51797ebc1d7b3e2 library/language/el/email/user_activate.html -17977a9fd8ac050cc32d160d38f5679d library/language/el/email/user_activate_passwd.html -e64e6bb066032312981c7d49abcd9436 library/language/el/email/user_welcome.html -906f094e04cc730935e2200be8383f9c library/language/el/email/user_welcome_inactive.html -8e542bb6810017f565e343aad713dd6d library/language/el/html/advert.html -f7768114742902082e1af973cfc751d3 library/language/el/html/copyright_holders.html -b7a38619c436c7607e5bf55fba8c1e86 library/language/el/html/not_found.html -3b53900a88c05a5f747fb64096732439 library/language/el/html/sidebar1.html -297dd233fe1e867bf0fe681401895400 library/language/el/html/sidebar2.html -f5acc817dec413e552facb68f940d83a library/language/el/html/user_agreement.html -3865f70978a7aa3c50681c0b3bdd29cb library/language/en/main.php -43ace478369536d757ecb52682ece0ef library/language/en/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/en/email/blank.html -184658cb8e493afa7458eff0e27f470e library/language/en/email/group_added.html -b5613d945c8a902f6ca2b3057bb184d1 library/language/en/email/group_approved.html -faa29a4451d5e82900e61100960fb5fc library/language/en/email/group_request.html -b333d3051c14beef5ae8676e68638b3b library/language/en/email/privmsg_notify.html -fe0874f017d9fa9b21f9117bbe07a55d library/language/en/email/profile_send_email.html -38cf675c66fb892c0f21c7ead1f02af3 library/language/en/email/topic_notify.html -011cd82ed6b8d9f00bf77a74ff654f9b library/language/en/email/user_activate.html -02b1231e89df8247362242e74028f8f7 library/language/en/email/user_activate_passwd.html -38cd84435f7e34b2f2e647e29b3e3215 library/language/en/email/user_welcome.html -fe375a59ff07f302d19edd34206996e2 library/language/en/email/user_welcome_inactive.html -4ccfd11d35675ae1895fe1b2cdda264e library/language/en/html/advert.html -b6caa4c7d5062292c26a014b4b39389c library/language/en/html/copyright_holders.html -5590cea5c6aed75abebe1e50407250dc library/language/en/html/not_found.html -1cd0360bd6153169750417809cb44669 library/language/en/html/sidebar1.html -ff0881e90bec102d05a9bc85461a923a library/language/en/html/sidebar2.html -029f28ebd041cd75a0804f05b469ad89 library/language/en/html/user_agreement.html -c301943057e503607e1b3d7cff0fc0c7 library/language/es/main.php -dd0e9d58fae13ea1dade165b97acf76b library/language/es/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/es/email/blank.html -3fcb4eae1a0c83f0672772a4ebe3d09a library/language/es/email/group_added.html -d5ae00877ba3bab0da4068c7f103b7ea library/language/es/email/group_approved.html -f691eaa033edda7fe96a2d1d8b19e4ec library/language/es/email/group_request.html -f086b95c75d9bcb89e32615152e8e37a library/language/es/email/privmsg_notify.html -295b6ea1786d3653803fa6f831925db5 library/language/es/email/profile_send_email.html -a48db6c4ef24b4628ff000feaae9c869 library/language/es/email/topic_notify.html -488c33b267a4a2e6c9480cb80743291d library/language/es/email/user_activate.html -c7a8bc563d2a01787d040718734f9eb7 library/language/es/email/user_activate_passwd.html -e253084bd1580b54ef94be3e9a439258 library/language/es/email/user_welcome.html -e1779b918fba0e4961f21fbc2c954423 library/language/es/email/user_welcome_inactive.html -0db477c6e51b91f30425b5c64989fb10 library/language/es/html/advert.html -8001c4ab969bc11cd548c6a288b708b5 library/language/es/html/copyright_holders.html -ba75f6853f8f36ecbcfe4ca8ed43cd84 library/language/es/html/not_found.html -e2e049e6bb310b2a67e82e91e72b0445 library/language/es/html/sidebar1.html -64767d5db29ae3c2c0709a9a8f423718 library/language/es/html/sidebar2.html -1ab8d54f19e882531724f0863aa8429c library/language/es/html/user_agreement.html -a99a22df1d8b96037d12c7264865a6dc library/language/et/main.php -20b34904358dc4e8d27b1693be5c6450 library/language/et/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/et/email/blank.html -52dc29bb260d4b6063ac27eb497d8bbc library/language/et/email/group_added.html -364d3ebb10aa193b078063e5278ea037 library/language/et/email/group_approved.html -23d81fa162223363409d0d2b2022c650 library/language/et/email/group_request.html -5b9b3b9d9c89462bea40991abd40e910 library/language/et/email/privmsg_notify.html -a9fe94026cd5ace0e7ed18633f1724d7 library/language/et/email/profile_send_email.html -a50924ee9afb39082a164b00b74000d2 library/language/et/email/topic_notify.html -849c65f458354d436bd319b7291ed1ea library/language/et/email/user_activate.html -450e61e0564d251e4062a054f26f2b3c library/language/et/email/user_activate_passwd.html -ecf78a35c69a2a9a00748c0f9e67444f library/language/et/email/user_welcome.html -073efe55f679617d3fdabfa5a93d2fab library/language/et/email/user_welcome_inactive.html -5ae7b2c79fb7608819fa94d529337fc9 library/language/et/html/advert.html -d94426e9da54281db246b68355e4c0fe library/language/et/html/copyright_holders.html -bbcf9bfd6b6b6c017b6bc5459b35dcef library/language/et/html/not_found.html -2f931b3a9673166acae56acd3a684a5a library/language/et/html/sidebar1.html -953857faa36f03fc16f0e61cd93af8fd library/language/et/html/sidebar2.html -53f1b47978dc7bc69344779b841b56f4 library/language/et/html/user_agreement.html -ed233426bd47e14f5ab23838e5a44d74 library/language/fi/main.php -6f734b8866c2821b6a7704b21d0e5426 library/language/fi/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/fi/email/blank.html -ffb7654f707ace39f2c65e8dba9d60c9 library/language/fi/email/group_added.html -57db1bdcd8614bf3c6b0b237bc685dbe library/language/fi/email/group_approved.html -9f514fb9ba5330d59bad9876ca21abf1 library/language/fi/email/group_request.html -8c89ff4b132148e25596ba217a6a818a library/language/fi/email/privmsg_notify.html -8231a063ee1343c319e0b6c697f84fd6 library/language/fi/email/profile_send_email.html -3709e8cdec189b5751b2d19e5c31778f library/language/fi/email/topic_notify.html -0e630a9a0e3a73d5bd261f185c7785c5 library/language/fi/email/user_activate.html -4cfc62ae77f14beaa45365c978707f3c library/language/fi/email/user_activate_passwd.html -172f03f58286df0f35b8f6ff5a0950a9 library/language/fi/email/user_welcome.html -e1d26915b3fbd8f25488116e4af76a2e library/language/fi/email/user_welcome_inactive.html -275d9c32053969a83ac864144f6a2736 library/language/fi/html/advert.html -ba5f17c70cfe64d75c426938b343e1c9 library/language/fi/html/copyright_holders.html -95fbdea6427df19a9e7938dc39baea7d library/language/fi/html/not_found.html -2ec13c27fb4a2349225d20409a0b9b8e library/language/fi/html/sidebar1.html -3fa9a0fa142031af68587cae01928639 library/language/fi/html/sidebar2.html -af46be3950cd02e4a525de4c25da9919 library/language/fi/html/user_agreement.html -9c5179b9a67809bdf61faee7b0d41931 library/language/fr/main.php -30ae50f5ad9d72377db5aee6811dc835 library/language/fr/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/fr/email/blank.html -7f0a7ea450b507cf6d71eb8a9d22f09b library/language/fr/email/group_added.html -e0d686031d48df5bc63dcc1cddcd7095 library/language/fr/email/group_approved.html -2334aab1c72d18d9b06025468b928654 library/language/fr/email/group_request.html -df6783bf7e3e37109cda03edb1f3153a library/language/fr/email/privmsg_notify.html -74d0613c26fc229340aff17b2da6535f library/language/fr/email/profile_send_email.html -a2d0c1af477af63f90fd4f922460b867 library/language/fr/email/topic_notify.html -e88860a57a690fb603d0752498b85b81 library/language/fr/email/user_activate.html -8b578b49c860e4ab3d3260fe3d85371e library/language/fr/email/user_activate_passwd.html -9f335bbcb46022f37567113c1e25bbd1 library/language/fr/email/user_welcome.html -0229f1b368da65c74be8d112eca9885e library/language/fr/email/user_welcome_inactive.html -b4c6a1937959065dfb2b39158bc91644 library/language/fr/html/advert.html -195fd5144cc6f42d9849a8fdf9b35943 library/language/fr/html/copyright_holders.html -d474b57e1ee44cf90b523b82096407e2 library/language/fr/html/not_found.html -9be9ba4ab88e2df5db6386ae6f7bb4ed library/language/fr/html/sidebar1.html -3ae3860b494855728d786683f11c9671 library/language/fr/html/sidebar2.html -775a59a108b86c783a623430ea024546 library/language/fr/html/user_agreement.html -6c94c9a5e168a205cee01796286a9357 library/language/he/main.php -f2880e58e3ed3070d67375ff59121b80 library/language/he/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/he/email/blank.html -714959c1353a02a04b6b89165be7fe28 library/language/he/email/group_added.html -06e4e568217476c38021f070f1e320fc library/language/he/email/group_approved.html -dd35fd510477af373d2a9ae8414f583c library/language/he/email/group_request.html -10417eec1f12198379276cf05e0579a1 library/language/he/email/privmsg_notify.html -6173a3f32f88f4b7ea10a0f104da9e3e library/language/he/email/profile_send_email.html -952a00d01d23f33ee87bfc6457ea133b library/language/he/email/topic_notify.html -f1ef4252811297032ea41f779b58132c library/language/he/email/user_activate.html -145816b3bf12857c7fd9e32700e50f2d library/language/he/email/user_activate_passwd.html -8cada50b8b5cbdd4f7bf964330f72024 library/language/he/email/user_welcome.html -ef111a632f19e01a6d8a260e57fdce0f library/language/he/email/user_welcome_inactive.html -81d1aadef9cab1cc1361787cb6c6e7e9 library/language/he/html/advert.html -c823e1276e300d688ba13f761589bb12 library/language/he/html/copyright_holders.html -94945ba6d3b54ab0299876f341566e37 library/language/he/html/not_found.html -948036fdec2142982b33f006db6f4f6f library/language/he/html/sidebar1.html -6b960526043d13bd9c81183ec88d8c2d library/language/he/html/sidebar2.html -d654f7b2cfe525caa532bc07c79a75ce library/language/he/html/user_agreement.html -cb131bfe5ab54d3a2e4ac6c422b18d80 library/language/hi/main.php -111fd15407b0a332f826d8725ef97da2 library/language/hi/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/hi/email/blank.html -2b3e6338a411203f96f881baf3326bd9 library/language/hi/email/group_added.html -252e5b3d7d7642959e6197f8568d5767 library/language/hi/email/group_approved.html -bc1e479e888dcc9657ac4776310f1cca library/language/hi/email/group_request.html -d609358be2d4fbc751a56de5a9108f8b library/language/hi/email/privmsg_notify.html -19e20c0f6f3c287555d18914e389b8d5 library/language/hi/email/profile_send_email.html -6dc3a56d97374bb878eacbfd3ca293be library/language/hi/email/topic_notify.html -ea595cf6d6c61e60bb315a664a6d187d library/language/hi/email/user_activate.html -ef8106b2c8e1e16e16765575188e2c04 library/language/hi/email/user_activate_passwd.html -b2d16e7a9fbea0b58f5214d651d5bf73 library/language/hi/email/user_welcome.html -bfc1d3a3a1fd755ef77a931c1371b44e library/language/hi/email/user_welcome_inactive.html -ee442d6ad74ccef2546f5c60901fcab9 library/language/hi/html/advert.html -57ef7cf481c516923da1febb5992371c library/language/hi/html/copyright_holders.html -f0279545cc919e24a3178c18a78396cc library/language/hi/html/not_found.html -eb21ea818d08048716b2f47687774284 library/language/hi/html/sidebar1.html -40278dc1cd185a1c35846f4238f20d99 library/language/hi/html/sidebar2.html -e6fff5964edeb19af2b846e1ae49f018 library/language/hi/html/user_agreement.html -9738bbdefd8429b62bd5e41670045bd9 library/language/hr/main.php -3faf52a453b5ed66d4093c32c1d59ca8 library/language/hr/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/hr/email/blank.html -5f4db86e9c26958473782080f0107170 library/language/hr/email/group_added.html -52c9f86ff2920716e5bf2f8a2af35b2f library/language/hr/email/group_approved.html -499433d11fe4ba0924287425112d950d library/language/hr/email/group_request.html -97081f6dc4c8c5740547190652e9f233 library/language/hr/email/privmsg_notify.html -d9fdde3f5d8430001b7133ce0593c693 library/language/hr/email/profile_send_email.html -8cebc5aad9228f8acd4146449b7e8df3 library/language/hr/email/topic_notify.html -a67447c820d44b9577a37cb313d6af61 library/language/hr/email/user_activate.html -a6d9d4634373cf918c3f91d3daed9129 library/language/hr/email/user_activate_passwd.html -6c30c4c6af046cff2398612b7d930bd4 library/language/hr/email/user_welcome.html -917bc05fa6a71a0d6b6be340065990b1 library/language/hr/email/user_welcome_inactive.html -e5eb5e842ae50c7f1272a8dc51e3040a library/language/hr/html/advert.html -52af7308efe146f64f5934ecb07676d5 library/language/hr/html/copyright_holders.html -19151f104d60ea41e51ecbf9bd10cd96 library/language/hr/html/not_found.html -edec75afedf408222ce68855924a1c82 library/language/hr/html/sidebar1.html -ba7df0e4c2002ecf50df5a0ff04a5355 library/language/hr/html/sidebar2.html -87daa5162c0adb1288b0544ea0ac1375 library/language/hr/html/user_agreement.html -69c5c219ccd3e28bdf8a4a05e534687c library/language/hu/main.php -2c6e3349c2431cbf98dea302b0db5e43 library/language/hu/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/hu/email/blank.html -444cb6749e377dcd5952442612428741 library/language/hu/email/group_added.html -e0b5ea2fcbb85863ee3602381ceea171 library/language/hu/email/group_approved.html -adde7e48102d74636d95765f5c765bfa library/language/hu/email/group_request.html -5d85e4d2a824259ccfa4443df39dfdc0 library/language/hu/email/privmsg_notify.html -0779138f11c25a9d81b47d88db2e4f8e library/language/hu/email/profile_send_email.html -4413ea803ba497c5f65f3ad2837f7b50 library/language/hu/email/topic_notify.html -37d6c991492691338b8a0e8da06a151d library/language/hu/email/user_activate.html -28ef6872c09d9646daecc5decb6e15d9 library/language/hu/email/user_activate_passwd.html -0cfcb86b618757da2dec9a0bb095084e library/language/hu/email/user_welcome.html -c28bfd98f40716e49dbcdcd592a46a6d library/language/hu/email/user_welcome_inactive.html -8fc331e76b81535030a5eee472af31bf library/language/hu/html/advert.html -710ecfe76932731406b603c8b0d66186 library/language/hu/html/copyright_holders.html -6574477d49fee5dbd9055dc5d0e14d32 library/language/hu/html/not_found.html -f4ef5198ffaf401419ea1695ffb24cbd library/language/hu/html/sidebar1.html -acdc564938eddc1fe42b42ccbf20c058 library/language/hu/html/sidebar2.html -4b8cc3abbee886160396b99355110629 library/language/hu/html/user_agreement.html -06b7c829b42b32ccfac8ccec98519da6 library/language/hy/main.php -e6033d17cb04dd9e0093f86e3e8bedec library/language/hy/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/hy/email/blank.html -b1ba390f723d3e01830ca8235db35c34 library/language/hy/email/group_added.html -2e76fec3411d5c3110775386acb0ae83 library/language/hy/email/group_approved.html -5f373f10bd0eb17eb536c615f53af3a5 library/language/hy/email/group_request.html -920e637fa421fc93d5044c777ecd20e4 library/language/hy/email/privmsg_notify.html -ac73737584b61b7a089b5fbb91f56d64 library/language/hy/email/profile_send_email.html -5980a16e04b1840ad84d8c62f005c8bd library/language/hy/email/topic_notify.html -d6090afaebd77b727dee53b88a73ed3a library/language/hy/email/user_activate.html -23e52a140a14a547ab8d52f680d445b6 library/language/hy/email/user_activate_passwd.html -74c208d71f4d187e892ccd0a8f4749b4 library/language/hy/email/user_welcome.html -1ca5df9dccffc7584683785fc62c029a library/language/hy/email/user_welcome_inactive.html -1bd182c044ba9837c6e797b7d14c8644 library/language/hy/html/advert.html -617654de6ef6c835d5ed7a3de964d0d8 library/language/hy/html/copyright_holders.html -5837a9fdba408c3f223d59772d09e82e library/language/hy/html/not_found.html -d63d0533c24539813596634906b4b884 library/language/hy/html/sidebar1.html -e7e8998dba4ad85d97af17cced6691ef library/language/hy/html/sidebar2.html -abb86048ddea7651832d0efb525e9482 library/language/hy/html/user_agreement.html -123cafe4f9d80b4e711c74ed1c1674c4 library/language/id/main.php -d365136686a86f0d625cb30e2bfe7626 library/language/id/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/id/email/blank.html -36e5a2ee718e77a3790ce87d51f4c691 library/language/id/email/group_added.html -74dc353d2d9e016c900e04584329813f library/language/id/email/group_approved.html -8fd1726e079662b466f5f2604d278e01 library/language/id/email/group_request.html -a2a31d85ea4da2f28078640a396a4670 library/language/id/email/privmsg_notify.html -01ca1047ddd261fcd41517f474bf3643 library/language/id/email/profile_send_email.html -87a9cd9c52dedd3431b7a36b5505d903 library/language/id/email/topic_notify.html -cea837b100305fbddecf47e19784df01 library/language/id/email/user_activate.html -03c888dd732ce61d43be3ef436503862 library/language/id/email/user_activate_passwd.html -bffdb6c811c90bda6e72f1ee21eb539e library/language/id/email/user_welcome.html -ce6454a7efc028e60e4a013ae9024b5e library/language/id/email/user_welcome_inactive.html -631b803dc94a2fa8e1956e4861294684 library/language/id/html/advert.html -21c4ca2582655323159b090c1b790311 library/language/id/html/copyright_holders.html -c5a4dcdb7d9868dd77a81746997dbd31 library/language/id/html/not_found.html -4f5f614aab8625ad5dd25643b7df58a7 library/language/id/html/sidebar1.html -37f91cd2e67e99e374efff27eaf8b6a8 library/language/id/html/sidebar2.html -827151848296671689409333277d9221 library/language/id/html/user_agreement.html -edd94fb06affd521e05218c209e8681a library/language/it/main.php -0da45ac52e067ad94172be603534c055 library/language/it/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/it/email/blank.html -2b20a5dab228c950b26686ed481f884e library/language/it/email/group_added.html -1effd6e897dccf2cc5befbb20686a324 library/language/it/email/group_approved.html -956c65a6dc872d94eb49868cb79238de library/language/it/email/group_request.html -85f5a6be86f1c260c0a3fb51580dc4f9 library/language/it/email/privmsg_notify.html -e944cd22e0516aab1cebe484e81a7551 library/language/it/email/profile_send_email.html -b8ef9b6a75076defbfc6a914a3b60257 library/language/it/email/topic_notify.html -b8e0822d80f1ec3e3e379a71204a2763 library/language/it/email/user_activate.html -e84627b911090a8e7c432ed3d7cc4c84 library/language/it/email/user_activate_passwd.html -3bf88d9e6d2f2e52175ae93b5edf345b library/language/it/email/user_welcome.html -7b8b9878f00021a3998531d2d56a457f library/language/it/email/user_welcome_inactive.html -2d24864fddcbd18f7c0e2902c69dcdd5 library/language/it/html/advert.html -bc746c34c354bf1fe8a7b7e45a570eff library/language/it/html/copyright_holders.html -e854d0bd9a666613e7ac25d29090e25f library/language/it/html/not_found.html -02dd36f064c8cba2dc1cd643c022ec9f library/language/it/html/sidebar1.html -09876702b62929ae10d15304e115f90c library/language/it/html/sidebar2.html -ef647a7bd3a10bc800129e5a37b571fa library/language/it/html/user_agreement.html -25ba84ae257e6503afe49c094befd2ff library/language/ja/main.php -b3493ffe8be4fc601a0b61fc300791f2 library/language/ja/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/ja/email/blank.html -21c9003efe359333c9dde9ca2e9f4570 library/language/ja/email/group_added.html -a2de38be083135e9f066c3dba1184b43 library/language/ja/email/group_approved.html -72f61806494f0246eea82d159ce588b4 library/language/ja/email/group_request.html -2f9b0a2ffcc0559b647e689a6cf094a5 library/language/ja/email/privmsg_notify.html -cbfc331e43b4998662dbf1432650e9fe library/language/ja/email/profile_send_email.html -202420b00ebaf55f645860b85b538764 library/language/ja/email/topic_notify.html -c4b504856fafad0c7fa02ddd6e4569eb library/language/ja/email/user_activate.html -52947bca8e459c184b0126fd9e0010c4 library/language/ja/email/user_activate_passwd.html -5ac61b3c570b5677c250c2c538a9ae35 library/language/ja/email/user_welcome.html -cf11467d145d136e1f818aea3cf20104 library/language/ja/email/user_welcome_inactive.html -2b92a420074d353e9501261a024c6818 library/language/ja/html/advert.html -2dd4415bd2c035cf494a7183ad8c86fc library/language/ja/html/copyright_holders.html -715c1f6391172e329b2f6fd05c15e006 library/language/ja/html/not_found.html -402696c793a5c4123ce6c8d72297d4cf library/language/ja/html/sidebar1.html -6f125ae9dd1b88fd2f5cb0593e58502e library/language/ja/html/sidebar2.html -b1f5feafb7159de7687976fbbd0eea45 library/language/ja/html/user_agreement.html -d9903d19671f4e3bc0c933780a7619c0 library/language/ka/main.php -32e55ff6a03cad32f8c688434885dcd6 library/language/ka/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/ka/email/blank.html -cea67a721713a72f0340d227e462403a library/language/ka/email/group_added.html -4d3ee6af55ea4c38119ad64ac9033505 library/language/ka/email/group_approved.html -1fbd963c9bd65fd1a478a5f43abeaf76 library/language/ka/email/group_request.html -9a2faf12c920fdd9eb1847c2ed6a02c5 library/language/ka/email/privmsg_notify.html -e9b40557233bef53cbbfc5a67baf30f0 library/language/ka/email/profile_send_email.html -d978f9102a65997f998241d17c3a2d85 library/language/ka/email/topic_notify.html -4a1d3c7001ff2ece3b1a29505ab43daf library/language/ka/email/user_activate.html -c8adc1b123878300c7bae166a540d776 library/language/ka/email/user_activate_passwd.html -bdcbdfdfafdb5ae715e8208b333ee030 library/language/ka/email/user_welcome.html -0c131bd13420dd00242be0a70d4e84fd library/language/ka/email/user_welcome_inactive.html -101d27537fb8e6f9384ddb45fef77b05 library/language/ka/html/advert.html -92724207b3309e3a4bd00bbf1ea9dcfe library/language/ka/html/copyright_holders.html -ce7d27497792e1eac08bd32c46a7c47a library/language/ka/html/not_found.html -b3947ecb8ff4930e19ec12863b6eccd2 library/language/ka/html/sidebar1.html -d918155afce78c28bb59fb43022369ae library/language/ka/html/sidebar2.html -09523adc111b161be3fa90384e241eee library/language/ka/html/user_agreement.html -134f45b0e22757f770eb66d5e76228c2 library/language/kk/main.php -4f97d9ee5905d907c796c2052109780c library/language/kk/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/kk/email/blank.html -08104e972b897f26d15707de0a56be12 library/language/kk/email/group_added.html -434554ab6dcde697a6fd45a8712ad9a0 library/language/kk/email/group_approved.html -ba39af3125e72492d2f173def79d130c library/language/kk/email/group_request.html -718e2caa067eb1fb015b8c38d11a1261 library/language/kk/email/privmsg_notify.html -50bf605a6e5c42392230f0f7d872be41 library/language/kk/email/profile_send_email.html -f18f84367476f2c95622ae3b14895606 library/language/kk/email/topic_notify.html -34b7777423bcadcb527c19589b17964b library/language/kk/email/user_activate.html -f3d928a19bab133755b4b30a2c2ff76b library/language/kk/email/user_activate_passwd.html -1bf2540f29936a6ecf28ada08ca9a5f5 library/language/kk/email/user_welcome.html -abda028b2761bb94700ed4e927e5f7bb library/language/kk/email/user_welcome_inactive.html -15b75d074ccef4983b8254ebd7108d0e library/language/kk/html/advert.html -86a7db1cbeb20a401cc4854ed53f170d library/language/kk/html/copyright_holders.html -dee4de13be0193cc49308035c7934c01 library/language/kk/html/not_found.html -8e35fd6955d91c2f57a8573a35097847 library/language/kk/html/sidebar1.html -5fc41f7cfb5e69559e2ea364f5751de1 library/language/kk/html/sidebar2.html -db5778bbbd4c45e3489b2bbffe3aa943 library/language/kk/html/user_agreement.html -b3e5f21e455338dbeb28ae5532d41ede library/language/ko/main.php -5b7853fdd5968990ddb8c31e91030e31 library/language/ko/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/ko/email/blank.html -6d4ca2541797aed747c0fc0c7fb8b354 library/language/ko/email/group_added.html -2b3b01f1cc1b773e2cc9e4438f32ab58 library/language/ko/email/group_approved.html -8273f3df85c9bd79f9ad9e44271d6bd3 library/language/ko/email/group_request.html -5a07214fb1a174945a5fa03ed606a586 library/language/ko/email/privmsg_notify.html -da8ae7fee4df3f979f510edcf0846eec library/language/ko/email/profile_send_email.html -fe91cf2cae45727d82dccdcd45b3e891 library/language/ko/email/topic_notify.html -a23d72f21b35336750c03a6fb16aeb26 library/language/ko/email/user_activate.html -8012110273fcd49633c8a77a12a572da library/language/ko/email/user_activate_passwd.html -534809f6f5b6eec9008b3660d4aa2df9 library/language/ko/email/user_welcome.html -fa1b2c9503499334cff04079a1241e5b library/language/ko/email/user_welcome_inactive.html -c4dbdb7a3bd94976b60dfd310455d296 library/language/ko/html/advert.html -d5827e89d609f2aea64857deccf5bc19 library/language/ko/html/copyright_holders.html -8c1c7494234abb7db26e647331a8e5b3 library/language/ko/html/not_found.html -502b4ace55acd75cf7675ce39491b3d3 library/language/ko/html/sidebar1.html -e131a3a2dfb8fb823a3c50c610fe2266 library/language/ko/html/sidebar2.html -a6d1f31aefaa4dcb1d0f4bb545e0d81a library/language/ko/html/user_agreement.html -126982c35b24d3244648818229386e6a library/language/lt/main.php -a645f00cc56120a7e1f19415be547e79 library/language/lt/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/lt/email/blank.html -97ff999aec851e8131b611a4409491ad library/language/lt/email/group_added.html -08562740bd1081a1af41e14fb8605b6f library/language/lt/email/group_approved.html -aeb5c55316524bd6f0d421a26c9765fa library/language/lt/email/group_request.html -d1f2ce4119a3a495746ee7171a3f8521 library/language/lt/email/privmsg_notify.html -3f5d04e40030c1eafbb444384d51eb33 library/language/lt/email/profile_send_email.html -4d524be8e6647d0a08b535f586c28a19 library/language/lt/email/topic_notify.html -1841b91202d24cee9ab39676d4ee3af3 library/language/lt/email/user_activate.html -fb3324fcaf9e996d6e444dd697491549 library/language/lt/email/user_activate_passwd.html -7933bc4c9fcd22d7fd495fb0b2ba3933 library/language/lt/email/user_welcome.html -d50947d2b240c749684feb02aad767cc library/language/lt/email/user_welcome_inactive.html -f699d5774307a1e6b9acc8b5086a023a library/language/lt/html/advert.html -f312fb561a1f228e1e0956d81e2b0897 library/language/lt/html/copyright_holders.html -c0bb40fbeb9bc3bb498bcae7263aa029 library/language/lt/html/not_found.html -b3987611a0520d11296111bff5f654a1 library/language/lt/html/sidebar1.html -4c938478ba0a40d9101f47c070c1f736 library/language/lt/html/sidebar2.html -9561c3d80bc86b621d988e4f88cb7fff library/language/lt/html/user_agreement.html -9b8b4b9a837ce0c8e24d36532398109f library/language/lv/main.php -621b46c27cef8b8668d06f721e1cddd8 library/language/lv/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/lv/email/blank.html -a4a083e300685bb9c1ff03f057adca7a library/language/lv/email/group_added.html -c597669bbc088a544f2d98f39d99b755 library/language/lv/email/group_approved.html -b33c986a1e79dd48f72470218d2328b3 library/language/lv/email/group_request.html -d2dbe056ff69c5948576fa182bf885ac library/language/lv/email/privmsg_notify.html -c2e1e5b5bc26360ad68462e544bff887 library/language/lv/email/profile_send_email.html -64c3f2901244f3931cd68c5fbeb1aec2 library/language/lv/email/topic_notify.html -4c8d8ef56e6c4dcb78773aec9169bd28 library/language/lv/email/user_activate.html -46918d454c76676cecf0272d2312878a library/language/lv/email/user_activate_passwd.html -b0da4a1aafc3ba1cb18a2d62e9bdf3b1 library/language/lv/email/user_welcome.html -78b6d7e5b46bebc6508b1ed8f5bed897 library/language/lv/email/user_welcome_inactive.html -ed84c307cadd772acb447beef08def9a library/language/lv/html/advert.html -32915211c4ae934f00c8d096d10333ce library/language/lv/html/copyright_holders.html -7911c895cbb56b7f361285cde14ecd72 library/language/lv/html/not_found.html -882a7a864f24c4ff31958f2ae746c5ad library/language/lv/html/sidebar1.html -346c8277ba76216b4feb48b85e739be2 library/language/lv/html/sidebar2.html -994e2157ea7ca94488c0f258a472986b library/language/lv/html/user_agreement.html -fc696aaf7a1b568ee9b38cef72c77ee3 library/language/nl/main.php -a25df8e1c8334031c2bcbc7691ce481a library/language/nl/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/nl/email/blank.html -209ed57a9d2ef48cbbbaa18b50057bc4 library/language/nl/email/group_added.html -64fca96db1f2d0d342ce613db78bc152 library/language/nl/email/group_approved.html -db1fc1c1bd7ee725495878160874944a library/language/nl/email/group_request.html -225b3d8ae00f0c85f96aa1bb22409694 library/language/nl/email/privmsg_notify.html -cf0693715d695917cd1060ffe1424376 library/language/nl/email/profile_send_email.html -554156fac4f5741f55b3d277e18bfa96 library/language/nl/email/topic_notify.html -8861378a2cdb95f921c92c87588e43d6 library/language/nl/email/user_activate.html -54dcae1cd9224c26df6fbdabc87e0340 library/language/nl/email/user_activate_passwd.html -76fa27a8f54902756f629a4fe519db77 library/language/nl/email/user_welcome.html -1524c595d82e2e89f2248484ac1691f4 library/language/nl/email/user_welcome_inactive.html -f0d211a0263f3fa7d63029caf092579e library/language/nl/html/advert.html -e1070ce818dbe2812605729a82a7350f library/language/nl/html/copyright_holders.html -f52e6d64966155e222edea6667700ee0 library/language/nl/html/not_found.html -1a0642e8d70a5ced70a62e073487f4fc library/language/nl/html/sidebar1.html -6fffe94548d6bb49f322dfca381510c1 library/language/nl/html/sidebar2.html -49048dbce166899fb1dacbe660a7fbe4 library/language/nl/html/user_agreement.html -4d60ef55cb8ccbeb1f50d6658973a51e library/language/no/main.php -28e732db4eb2935dc96f6625746bdf45 library/language/no/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/no/email/blank.html -a743e747e07811273df9c3a78055455b library/language/no/email/group_added.html -01a41a55a953a4794e29159fcd97b34e library/language/no/email/group_approved.html -36249356fd16e8e1fcac42fee83f41ee library/language/no/email/group_request.html -47ede632688e60eab94670f32a3db82d library/language/no/email/privmsg_notify.html -7d613474fa76bbd50af50fcdd70dbbda library/language/no/email/profile_send_email.html -133f970ec59257fd97ec205128974d09 library/language/no/email/topic_notify.html -32470dc2dbf8af6460a3040bb352a039 library/language/no/email/user_activate.html -f79443557837ba55ac4d5522ef302bc0 library/language/no/email/user_activate_passwd.html -62e1e19179aef94d2eeed12055c643ef library/language/no/email/user_welcome.html -8c395bd80dd57036d4d7db26a2ad1783 library/language/no/email/user_welcome_inactive.html -dd72d50a42246d6fc3ff7f47d13b8c59 library/language/no/html/advert.html -04f94d88b10d35f17d56781dda5f742e library/language/no/html/copyright_holders.html -b4bd540f4654c832f892a5981a9aa94f library/language/no/html/not_found.html -50e84fc10037f10fb3633258d2704f5d library/language/no/html/sidebar1.html -c6f6dc41809fe29d0525ea45c8e64e5b library/language/no/html/sidebar2.html -45e7f236f39f13086446ace6fb03097f library/language/no/html/user_agreement.html -d0eb201af9b245fba3cfc59bd038beca library/language/pl/main.php -8e869e1b159e271a5140c50df736b725 library/language/pl/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/pl/email/blank.html -5f6ef4f5552d20520630b3be05b7fa94 library/language/pl/email/group_added.html -fd23c0123ca92e1268bf269e1a062ec0 library/language/pl/email/group_approved.html -b0b03382a2a02b0f6252161b28aaa0cb library/language/pl/email/group_request.html -72752f6314e6a72e6eedac1fd2d86c5d library/language/pl/email/privmsg_notify.html -b80fb979299e0991ff9102db339963b6 library/language/pl/email/profile_send_email.html -1d469ca4c390af617aab7d78fe24449a library/language/pl/email/topic_notify.html -fff4b8504b270852b3f6b5873e7ef167 library/language/pl/email/user_activate.html -a3e8e9db19800e99265749b47496ff2c library/language/pl/email/user_activate_passwd.html -0321c698eb24c5186df4ad39fc70d10a library/language/pl/email/user_welcome.html -fc8fb1a1439bd07c3ce4bc38b37ed0ec library/language/pl/email/user_welcome_inactive.html -892896b7e825569c8aff31777637a1c7 library/language/pl/html/advert.html -2cea58a13c910b6ea917ae9096abef20 library/language/pl/html/copyright_holders.html -8983ac5a2059c29599a4ccd79e111245 library/language/pl/html/not_found.html -b897aa5753a25f702ce106170d074411 library/language/pl/html/sidebar1.html -d7c43792c3ff2bfbbda9354c8a77e7a1 library/language/pl/html/sidebar2.html -416b266ee7bb1b708ff9c58cdf62c984 library/language/pl/html/user_agreement.html -60e91f7b789b2c99a5bf05c8c332e3cd library/language/pt/main.php -114429d7e62ae45708ac49d9b36ef4d8 library/language/pt/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/pt/email/blank.html -9aa088320fe1a639459e0588fa4bad01 library/language/pt/email/group_added.html -95accf62fdfc24d43019a9f52a99cb4d library/language/pt/email/group_approved.html -ddc69b245df8c938bf2d59d17c785c90 library/language/pt/email/group_request.html -2df88255d9faeeda779c8a5f6b87b15f library/language/pt/email/privmsg_notify.html -2d3fcaf9a1b384aed59e931e386f166c library/language/pt/email/profile_send_email.html -02add67774d08002751e76bee04feaa7 library/language/pt/email/topic_notify.html -a537d679827c11e5c336a892001154a6 library/language/pt/email/user_activate.html -c42692c329177b0bbd11e9de382d00ae library/language/pt/email/user_activate_passwd.html -13e4d7c0d6be0818c3b4252cbb7cc981 library/language/pt/email/user_welcome.html -a984aeebd0fd4d60af41cc44974daac0 library/language/pt/email/user_welcome_inactive.html -edf217127844e06669bbc420d90c7263 library/language/pt/html/advert.html -1693a6f36fd6ce9f57840ece6f5047a1 library/language/pt/html/copyright_holders.html -94a958cd6cd997664a3fa41163159d46 library/language/pt/html/not_found.html -6b444ea216b9d160c9a86c624a7d9e4d library/language/pt/html/sidebar1.html -9784fffc4cd947ef02f4d877828af17f library/language/pt/html/sidebar2.html -7c6e11f69f608c0022d682c18f7db04c library/language/pt/html/user_agreement.html -5078080c0f405b075be706d979555e90 library/language/ro/main.php -d1d2b21b9c90838a9aa575032db148b6 library/language/ro/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/ro/email/blank.html -f56ff2a4c8fb01ef34dbc0761f23428e library/language/ro/email/group_added.html -25488b29e85b90c0fb00f119ab69e62c library/language/ro/email/group_approved.html -3effaa83429594f3ecc943f62dd2690c library/language/ro/email/group_request.html -c939a23176530ebf5389332936f7de70 library/language/ro/email/privmsg_notify.html -5dc9e6efdcad27efa74cbf7e59372c8d library/language/ro/email/profile_send_email.html -80cdb07755ac2dc435a2fca0f2190ed7 library/language/ro/email/topic_notify.html -ea0e25d2aecb36b830e9adfb3e7dd013 library/language/ro/email/user_activate.html -d10bf724caaceedda45c0becdb0dfcaa library/language/ro/email/user_activate_passwd.html -687275e8605d55a8325cf990c399a1c3 library/language/ro/email/user_welcome.html -ba75974388e650f3a57cd3deaaf24870 library/language/ro/email/user_welcome_inactive.html -813cfb8e990a4d95a64db97f7e8cac2f library/language/ro/html/advert.html -6b79b1e56748987ee7a468295e5a6657 library/language/ro/html/copyright_holders.html -2238cef6b9d6c7b1056ce27765818be0 library/language/ro/html/not_found.html -0ab7dcbad16fd96af67401721a5129b1 library/language/ro/html/sidebar1.html -d9689659fa9f04c69c456c3c1448d20f library/language/ro/html/sidebar2.html -708ab1b0a57c73d6a800803bde3ecc68 library/language/ro/html/user_agreement.html -5f2e123053878a2b49e0387918d8f90b library/language/ru/main.php -8f410b36187c5256d6c8ff87aec3ef0f library/language/ru/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/ru/email/blank.html -e4e28bf037af98681167164d46f462b6 library/language/ru/email/group_added.html -bd9bde85ac531b020d6f832f2b3b62f8 library/language/ru/email/group_approved.html -f4c172726c098c69b30ffdda5737dec3 library/language/ru/email/group_request.html -1931e1482d725afe9a84103305e2c8c9 library/language/ru/email/privmsg_notify.html -f090328a4981694f3183f4ffbe347301 library/language/ru/email/profile_send_email.html -0d3c141a19e6c68c8c9ecfd34d23e684 library/language/ru/email/topic_notify.html -d68068e01c4cea41c37fdb3660bb4af3 library/language/ru/email/user_activate.html -6b120f92263c56389eb5ba2058abe1dd library/language/ru/email/user_activate_passwd.html -4bc6ab96220c213a10100946a1ce615b library/language/ru/email/user_welcome.html -00c1fa16ac754af967c6e5d5e3d56452 library/language/ru/email/user_welcome_inactive.html -b682435a57c33add1e532e985f676b51 library/language/ru/html/advert.html -75a8bd53f6307529afdf547fa9d92c5e library/language/ru/html/copyright_holders.html -1ed0e62fa4c70d1aefb2ac11be67284f library/language/ru/html/not_found.html -f08bb23a480d83eb293c2bcc45d9e5f3 library/language/ru/html/sidebar1.html -480e35f292515b08acb930a87bd36ed0 library/language/ru/html/sidebar2.html -ba438078e4caf456a4166e9dab1bd896 library/language/ru/html/user_agreement.html -c2ca395a57a48994485dac177e869fbf library/language/sk/main.php -c74a4d5bdf3440370f118ca07f1523da library/language/sk/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/sk/email/blank.html -0958412ecf73cc8483223c1846e78efc library/language/sk/email/group_added.html -05e1703710502806d33be19bedcfb68c library/language/sk/email/group_approved.html -cf6c9fe0e927a8cc49842a0f7eaaacf8 library/language/sk/email/group_request.html -ee0af6dde6652c1f216766f1857b50b5 library/language/sk/email/privmsg_notify.html -af19ea2334bba0cebaedba89b174d873 library/language/sk/email/profile_send_email.html -a1fac8a92c208561078594c0768a6b20 library/language/sk/email/topic_notify.html -4a68d0ca1c197d7b14029b7d0275996b library/language/sk/email/user_activate.html -357dd355c1ba6c9fa4000d9a3f54f854 library/language/sk/email/user_activate_passwd.html -9ada5702e0fa05fcbc07e296a2cce943 library/language/sk/email/user_welcome.html -a2924f3b3f11a0cf509fc611b28b2d5d library/language/sk/email/user_welcome_inactive.html -f590ddc79b89fb3b58632e23392283f0 library/language/sk/html/advert.html -de2e51415b3e41eacd37ef2ed8f5594d library/language/sk/html/copyright_holders.html -55539da094e9f2d3eb63ed4fe364be8b library/language/sk/html/not_found.html -e8d230ebfeaf50f93f3c29fffebcfa55 library/language/sk/html/sidebar1.html -55805a56d49546cbb607ef8b2e38fa3e library/language/sk/html/sidebar2.html -f03377ff7dc2d9e655c31d007d2b8ba2 library/language/sk/html/user_agreement.html -dacd26838ced7b2e42b9014a47056ce9 library/language/sl/main.php -fe6bfbb5568bcff0e7018cb1763ea19b library/language/sl/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/sl/email/blank.html -1d136f9eff28d959c46ea3bf1e91421a library/language/sl/email/group_added.html -13e975fccc7642e10fe4968ffe410b80 library/language/sl/email/group_approved.html -a20749194642467acd4a56210615fcfb library/language/sl/email/group_request.html -b91fa62952fd3f2318a4b30b9e053cda library/language/sl/email/privmsg_notify.html -5d064cbe5a77471970ab0bceea222517 library/language/sl/email/profile_send_email.html -fbd23d643d3327f4f14e3827c50cd3e8 library/language/sl/email/topic_notify.html -50e5a27c4495a3e42e199384ada89071 library/language/sl/email/user_activate.html -4612c0837091ff4182361dbf193430a4 library/language/sl/email/user_activate_passwd.html -46c367a34126a575bf35bbee57b5b189 library/language/sl/email/user_welcome.html -f2698d4587653edd2aa1770736c0c039 library/language/sl/email/user_welcome_inactive.html -de663f6060d7d4ac3de6450bcc71bc88 library/language/sl/html/advert.html -7f27b16613535b8bbcc5c205632e1b61 library/language/sl/html/copyright_holders.html -e3838f6865081ffdab7c2247a956c649 library/language/sl/html/not_found.html -1473f0b747870e40145e8528c2f84390 library/language/sl/html/sidebar1.html -6e846e2ab155843329a20f367fbaad5f library/language/sl/html/sidebar2.html -2a81c1223b1fa88d93a8eb1774c8000d library/language/sl/html/user_agreement.html -bd84a2db9b0de6391a9e277e264c6b39 library/language/source/main.php -43ace478369536d757ecb52682ece0ef library/language/source/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/source/email/blank.html -184658cb8e493afa7458eff0e27f470e library/language/source/email/group_added.html -b5613d945c8a902f6ca2b3057bb184d1 library/language/source/email/group_approved.html -faa29a4451d5e82900e61100960fb5fc library/language/source/email/group_request.html -b333d3051c14beef5ae8676e68638b3b library/language/source/email/privmsg_notify.html -fe0874f017d9fa9b21f9117bbe07a55d library/language/source/email/profile_send_email.html -38cf675c66fb892c0f21c7ead1f02af3 library/language/source/email/topic_notify.html -011cd82ed6b8d9f00bf77a74ff654f9b library/language/source/email/user_activate.html -02b1231e89df8247362242e74028f8f7 library/language/source/email/user_activate_passwd.html -38cd84435f7e34b2f2e647e29b3e3215 library/language/source/email/user_welcome.html -fe375a59ff07f302d19edd34206996e2 library/language/source/email/user_welcome_inactive.html -4ccfd11d35675ae1895fe1b2cdda264e library/language/source/html/advert.html -b6caa4c7d5062292c26a014b4b39389c library/language/source/html/copyright_holders.html -5590cea5c6aed75abebe1e50407250dc library/language/source/html/not_found.html -1cd0360bd6153169750417809cb44669 library/language/source/html/sidebar1.html -ff0881e90bec102d05a9bc85461a923a library/language/source/html/sidebar2.html -029f28ebd041cd75a0804f05b469ad89 library/language/source/html/user_agreement.html -df8f28a27191b7b4b46769e1d49ce872 library/language/sq/main.php -2d9812e5038e6c531a346883055cbea0 library/language/sq/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/sq/email/blank.html -86f212c370d95729c5847cdd2e981dd5 library/language/sq/email/group_added.html -4d4add7d685e5d11a716afbca2eaf234 library/language/sq/email/group_approved.html -b321b65ce39f383395c0e79991ca56d1 library/language/sq/email/group_request.html -0a15e04ce2a3010a9b5ad05788872b2c library/language/sq/email/privmsg_notify.html -0fb45061deadaf4d23a4823bc0c33ed7 library/language/sq/email/profile_send_email.html -ad7d9a1b6d1856009be3705a49e39721 library/language/sq/email/topic_notify.html -a7f71f87511170e71e9e52133044d9e8 library/language/sq/email/user_activate.html -9214c2b0112daa63063d681045bc17ca library/language/sq/email/user_activate_passwd.html -403f5c7b7a03f6244aa252622c6d5da4 library/language/sq/email/user_welcome.html -a6277c4830c7b7f5c372bb1a3a2b43ce library/language/sq/email/user_welcome_inactive.html -0f6f4e3f85df32e1c310a2660d489b92 library/language/sq/html/advert.html -47b1231331889bc683ec2b0afcb69ec9 library/language/sq/html/copyright_holders.html -36f217efb8a3ce8fdf71ef2c9a0eed86 library/language/sq/html/not_found.html -84181159bcbc7876a0d35351821975b3 library/language/sq/html/sidebar1.html -06195bff10f8bd6dbd79dd3338e627a1 library/language/sq/html/sidebar2.html -deb6241d73523c72785426d71a6a1a4c library/language/sq/html/user_agreement.html -01a0a39a98248267bad7f0601ce36c2d library/language/sr/main.php -42be071989d17e92cfa6991c69add8e3 library/language/sr/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/sr/email/blank.html -2132d77a66ac00d8c74d491882b3f450 library/language/sr/email/group_added.html -77e36e515e24291d74063a67a07a3db5 library/language/sr/email/group_approved.html -51c53a59515cc57cb0e26e9fec8321dc library/language/sr/email/group_request.html -c21b9d476eba7847ad00fc4015658593 library/language/sr/email/privmsg_notify.html -477ce5bc85c7753ac43b613d81f1abaa library/language/sr/email/profile_send_email.html -e9f4a27869121ca78864874eb18f051c library/language/sr/email/topic_notify.html -ab3d460fbc76b6a9ff67a015ae8a2b9e library/language/sr/email/user_activate.html -94fa0ae6ffe77b0c3e99dd6c8fbce008 library/language/sr/email/user_activate_passwd.html -cd00bf3e94d373aa5d5b16af5e45526e library/language/sr/email/user_welcome.html -2931e5850ed453809ef85049169876ff library/language/sr/email/user_welcome_inactive.html -d0b74fa6bb562a661b0966acf53fdb55 library/language/sr/html/advert.html -e9ccc6fdcf3b6fca014d589826255fd4 library/language/sr/html/copyright_holders.html -7367d27b7763710da7f6133cb03d33d8 library/language/sr/html/not_found.html -69ac10eb7b1a3505ecfc719a8c3ca167 library/language/sr/html/sidebar1.html -b36a10535549e9d41bacb41e5ab29d72 library/language/sr/html/sidebar2.html -13e7fdfdc82d5e94db8e2913987839c9 library/language/sr/html/user_agreement.html -7ca97be7fa8226fc90d9de43bed109ac library/language/sv/main.php -9b644daff1d85027d5ffb55a21bf08fa library/language/sv/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/sv/email/blank.html -392ecf4d72279df3ec6231b013848c72 library/language/sv/email/group_added.html -af0cf12152ab9e45d96db6207eebb325 library/language/sv/email/group_approved.html -39254b7f6226d68603fc0f2d56d48827 library/language/sv/email/group_request.html -b0a069522c9e9848cdaa6ee397ab3d0c library/language/sv/email/privmsg_notify.html -7e171685d1e3ce945d5fb19c40b2e5a3 library/language/sv/email/profile_send_email.html -dc046cd79bd0a0f8b930993626f168cc library/language/sv/email/topic_notify.html -d00c6910398d18dd35b41a962951314f library/language/sv/email/user_activate.html -f222d9177ef9b4e7f20f0be7097ed62f library/language/sv/email/user_activate_passwd.html -9f135b3c17a9fcecca326f47868df321 library/language/sv/email/user_welcome.html -c381eff0fd0dd0b46a0430f275f02503 library/language/sv/email/user_welcome_inactive.html -e3f70ef990d06dac7f3a26572cf846e3 library/language/sv/html/advert.html -606f74211e6a32baa72c3c1462e28971 library/language/sv/html/copyright_holders.html -6b99d61c456faf13b415520e4f5bbfee library/language/sv/html/not_found.html -c613f879a1ee494eeb3f536b79321805 library/language/sv/html/sidebar1.html -e7bb043f48157a072515bdc6aa4a70f9 library/language/sv/html/sidebar2.html -6b37e3400418769c4e16433aab88b6a5 library/language/sv/html/user_agreement.html -89830cee9beb06533e243b7d57be443a library/language/tg/main.php -5875ad97a5b7be6a25217e7489a9a9a4 library/language/tg/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/tg/email/blank.html -6c9aaa943841abb325566cdf5d5db7eb library/language/tg/email/group_added.html -a3359b80854544a3694d9959eeb5789c library/language/tg/email/group_approved.html -bbe7b4e4669519bb5891fe9962bb3506 library/language/tg/email/group_request.html -f7fd08d491f58a49ed5717d1a4e8f036 library/language/tg/email/privmsg_notify.html -f9f4e288ef782c16bc80f97f7ea6c871 library/language/tg/email/profile_send_email.html -99a3dbaa85348ce2cf99677114911b33 library/language/tg/email/topic_notify.html -bede4b63625fac17dc4d7d62f5ae8cb9 library/language/tg/email/user_activate.html -d682dbe6ecf6611bcaf1c09908493458 library/language/tg/email/user_activate_passwd.html -b50f63b1490fcba7d3ad09e0898731fb library/language/tg/email/user_welcome.html -91ad6b398d9755a0043c0ebd05353112 library/language/tg/email/user_welcome_inactive.html -e3c66a2d238b4a3416f0cf30982f48f1 library/language/tg/html/advert.html -2ffdb31da63a5f159df6b3a099732851 library/language/tg/html/copyright_holders.html -6b419efc77bb055326ec9c057dd0e465 library/language/tg/html/not_found.html -fd7e2cec354720220b6785ae76856db3 library/language/tg/html/sidebar1.html -e6e345c7db0e71a63cd7435b08815d4f library/language/tg/html/sidebar2.html -563fc3e1667598f2cc9fb8a46627cb42 library/language/tg/html/user_agreement.html -2c1506bf04265b0a1b3cb7cfb0f209c6 library/language/th/main.php -68a674a35a6f9ed5808a494f4d60bd3f library/language/th/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/th/email/blank.html -1135561d5945a84e29f8b8e776be673b library/language/th/email/group_added.html -98d3fc81fed70dcf0051c9abb723a206 library/language/th/email/group_approved.html -f24313cc3e68c2d54027a7c8f7e4cede library/language/th/email/group_request.html -804706e4df7c7f51875284cb4de4a2d3 library/language/th/email/privmsg_notify.html -240a250882d7f6d0124ee6ff47429346 library/language/th/email/profile_send_email.html -4cb3491135a0bdb812a3c82d05444d75 library/language/th/email/topic_notify.html -d2b550fd028395dd59a0c74339588fe1 library/language/th/email/user_activate.html -d7157f48f9eabeed99c612e81987dd03 library/language/th/email/user_activate_passwd.html -8e60c166059f4572b511b118713de632 library/language/th/email/user_welcome.html -0e99324e0f2a39dd5a3c8616dc5172c0 library/language/th/email/user_welcome_inactive.html -0d3e5be29fbd364b24a973e418cca113 library/language/th/html/advert.html -c9e0f954071a6635930a61034723ea46 library/language/th/html/copyright_holders.html -3cb216b2e2dec0b77554ea0686f478cc library/language/th/html/not_found.html -dad6c9f7c1285e83b609747874033494 library/language/th/html/sidebar1.html -461ee22290ae1e1d8a726b5f18c219da library/language/th/html/sidebar2.html -a2950d9368867c0e2d1f074a19ebc4ef library/language/th/html/user_agreement.html -352557df02e6b3839156c1e96e527adc library/language/tr/main.php -c43d43d5c1e0a75d88ecf3bf4715530c library/language/tr/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/tr/email/blank.html -bf0f108b7232a2921b49ee74631d6c94 library/language/tr/email/group_added.html -f0f5d1365aa5f947af138f4197141867 library/language/tr/email/group_approved.html -9cbc70fad3db67a68dab7430c00182d9 library/language/tr/email/group_request.html -22e53996bd0244e98162b70068656342 library/language/tr/email/privmsg_notify.html -9284f565c83d4e0c0558e9e6d8de2359 library/language/tr/email/profile_send_email.html -37097a2c2842e634ebd60ea9ad628041 library/language/tr/email/topic_notify.html -cc115967f5feb4d77ce0dbc09adfa5df library/language/tr/email/user_activate.html -f51185d9f59c670660aca5c93dde406a library/language/tr/email/user_activate_passwd.html -707c92870924837a59d134333089dd9d library/language/tr/email/user_welcome.html -712bc277268d8f4f4ace81233cfd6b27 library/language/tr/email/user_welcome_inactive.html -ed004d63ce744e83693fc6c8a7d608fe library/language/tr/html/advert.html -1ec09087339766ceae3b44d2e65f9983 library/language/tr/html/copyright_holders.html -2592a86556bba452477221cf152bf3a5 library/language/tr/html/not_found.html -3417bc8ba65bab33e171caee686166df library/language/tr/html/sidebar1.html -4bf0fb18a7a30d13b2665cedb0c3450e library/language/tr/html/sidebar2.html -8ff1b2a673e24cd480b3f06a3cdea208 library/language/tr/html/user_agreement.html -482590ac84ce832341b04a5f52568558 library/language/uk/main.php -2bb18814b16dc8a67ac434b5f362792a library/language/uk/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/uk/email/blank.html -3c502ea91f349376d4d1f4b7034c5291 library/language/uk/email/group_added.html -0402c400d4797c981dafb2fd9279a7bf library/language/uk/email/group_approved.html -12257b1dd451741683f366ae33f60de4 library/language/uk/email/group_request.html -c3a7f2aa409a5142753890fafdbe3139 library/language/uk/email/privmsg_notify.html -ee6e189e0f173035d71b957af27b4b61 library/language/uk/email/profile_send_email.html -d4c7b139eadc2eaa1a70b1ece990379f library/language/uk/email/topic_notify.html -5f687d535d9d83421fa780ab1c0f3fbd library/language/uk/email/user_activate.html -b58e9abf7686860eaac23982812dcb2a library/language/uk/email/user_activate_passwd.html -f1ba63b260a654cb1cf1c250c86443f0 library/language/uk/email/user_welcome.html -15c4f5b36cc8ee476ee6265bb40bdb2b library/language/uk/email/user_welcome_inactive.html -43b6794063c08be3bf7ebbd8af0823ed library/language/uk/html/advert.html -3941f304567d865cb07bb7319b629144 library/language/uk/html/copyright_holders.html -fcb832f029367bfd89105b1416354414 library/language/uk/html/not_found.html -a42d06fd9d064f4ec79d8bc16a4f2bad library/language/uk/html/sidebar1.html -ce70226dc294049ae7759b7a07b5c117 library/language/uk/html/sidebar2.html -50dbd0dc264d9a85fad974ee1ad1f932 library/language/uk/html/user_agreement.html -5f31603cc1b57e38de72f9a5fd22e753 library/language/uz/main.php -b467b1df2cbace46b084f0d6c2438e81 library/language/uz/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/uz/email/blank.html -4ad1223a6b5bbfb1a8f997f635b92dea library/language/uz/email/group_added.html -56f8f3851baced011333436f8e0e7afe library/language/uz/email/group_approved.html -e56865954f687e23d519c70550aa8fc9 library/language/uz/email/group_request.html -9e0275367e743b4d6e640842d356b53d library/language/uz/email/privmsg_notify.html -55c91c79fadf780d20d4c93f07f855af library/language/uz/email/profile_send_email.html -356314e74d024ee1a6ae2d70f015eb71 library/language/uz/email/topic_notify.html -70adeba549d372e9afeb32ca5a84e54b library/language/uz/email/user_activate.html -a7a003ff079af757fc92b0e163ebd599 library/language/uz/email/user_activate_passwd.html -8e9e9d59b299a9fb8935cb2ba8573633 library/language/uz/email/user_welcome.html -88e24bdaf1fc0d26f323ada9f544390d library/language/uz/email/user_welcome_inactive.html -238bf7ba7f612975297cb26fc4918b4a library/language/uz/html/advert.html -f42eff25bd6ec7eb7610eaee48b5de24 library/language/uz/html/copyright_holders.html -8da22cb055c14ec6a9479c28217fc681 library/language/uz/html/not_found.html -15736ca6d2ed409c551a98e8d5a613d6 library/language/uz/html/sidebar1.html -302ae8b0d3f6f8d450445b5be38ee8cd library/language/uz/html/sidebar2.html -e77fed1facc289e581ce3d0f274986b1 library/language/uz/html/user_agreement.html -9c882245711828c876733bf1324988cc library/language/vi/main.php -b1d6991b2c869cfa2718f4589f4e7639 library/language/vi/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/vi/email/blank.html -0d689ec3a9b6c54b470484034da915be library/language/vi/email/group_added.html -141758582504f9a6ad4608bdbb9669fb library/language/vi/email/group_approved.html -94b2076e41a64d21748df43c46367693 library/language/vi/email/group_request.html -c3af8bb8c4da917ca24d681c32f4f354 library/language/vi/email/privmsg_notify.html -a76f0ccf563dbc5027250b91b8e3e92d library/language/vi/email/profile_send_email.html -4debbaa89d75e4c65bf0554b9a66c67f library/language/vi/email/topic_notify.html -bc650c731e1149af1adc5a728e1bdd70 library/language/vi/email/user_activate.html -eb5f42a996a932f462e4beb9fedaecec library/language/vi/email/user_activate_passwd.html -f862706229b1d7725b8f3b213c2be2be library/language/vi/email/user_welcome.html -f88f9ca34d2b658dc89e138ffd63c995 library/language/vi/email/user_welcome_inactive.html -ec970a1fdbf453da3855f92915836760 library/language/vi/html/advert.html -3f27d71da300d2e6ad9635bf4dfbc7de library/language/vi/html/copyright_holders.html -d3de3f3a0bcef787adbcc88bf4715886 library/language/vi/html/not_found.html -ff2ec96ba76df1a6cf630ad0fc6028f0 library/language/vi/html/sidebar1.html -024e03b246a6076e73a774c81940dbe1 library/language/vi/html/sidebar2.html -68cadb9c3894f896add402779ae732ee library/language/vi/html/user_agreement.html -d614d218404f223a5e4abeadb32f3423 library/language/zh/main.php -9b89fbc9fd80667849ca47ea8f2ecff6 library/language/zh/email/admin_send_email.html -a7d99cd8e0fc5edcea26ad250c3552b0 library/language/zh/email/blank.html -e6d06a83cffe205a55a6cc442520b09f library/language/zh/email/group_added.html -10e37a3ec475625f24f2aad8520c0425 library/language/zh/email/group_approved.html -cbd7bcebac2cd1d58f368bc108462d1b library/language/zh/email/group_request.html -498eb7f96d2d2a153f2e1d3c09a258d4 library/language/zh/email/privmsg_notify.html -8a9649e91e5b24a9ac8f4a6e8760d1f4 library/language/zh/email/profile_send_email.html -387fd0558e718fb370740d64ef834288 library/language/zh/email/topic_notify.html -f58617e75a3cbd254510c8fb43e7b95c library/language/zh/email/user_activate.html -c8f9d4d3deb1cd6b880204af8316ade8 library/language/zh/email/user_activate_passwd.html -25413472955eb23b2551a3221a247376 library/language/zh/email/user_welcome.html -a40d6ad676bf1d193c92e4b3a2bb72aa library/language/zh/email/user_welcome_inactive.html -39d411f8580352c62a67e1b3809575f7 library/language/zh/html/advert.html -0ce1e9b1df71454978bf1b9f9810087c library/language/zh/html/copyright_holders.html -5d6e477e33fd7504ec9cd8216dbb1a46 library/language/zh/html/not_found.html -52335f7ab33900c25c18d8d62b3473d2 library/language/zh/html/sidebar1.html -effea2c0025770d3c6fe0f708664d7d7 library/language/zh/html/sidebar2.html -033ef515b8877d3ecfeb516ab44102a3 library/language/zh/html/user_agreement.html -d41d8cd98f00b204e9800998ecf8427e sitemap/.keep -6113e1f0bcf4f49f19bc2789f5abe63e src/Ajax.php -3697997497ee4d69e677822fec85e43e src/Censor.php -c3fa57c88a70ce6ef1a31f605fc4ef0e src/Dev.php -158e38dfbce7d435e3bb5afa4af7b9a8 src/Emailer.php -a8810dcfb889abfd133e5eb0361173c7 src/Env.php -f98f31aa7026a1ec5e548adead3b679e src/Sessions.php -86b946126503ef2f2375c89fdff538db src/Sitemap.php -dd4c39632c89c724cfff96639f437aa1 src/TorrServerAPI.php -f50fc7847f376602f4a621473ad6cd93 src/Updater.php -d0293f37bffb990dcfe833c76e2d72d3 src/Validate.php -9cba2c0c70d2484631c3ad134e20828d src/Helpers/CronHelper.php -e9a9d6e10ab045fb146a2e3c0601fc4b src/Helpers/IPHelper.php -b793ebe0cdc4a51798f4c970cf00e734 src/Helpers/IsHelper.php -1f74db133729ba537d92ce173fcc751a src/Helpers/StringHelper.php -e49c84f4a3cc26b69c7f09cd20972e30 src/Legacy/Atom.php -3d14ba8f9af121647717ab0a6fcb496a src/Legacy/Attach.php -83bcc62a1e39e844c67df0c874171f8b src/Legacy/AttachPosting.php -d5c3fcbd37a2b2ce63d5e693f8434875 src/Legacy/BBCode.php -4378a2a34872f2b43a5d60153f8400c5 src/Legacy/Caches.php -546ce1737f422a64b2490b2a09eb3ffb src/Legacy/DateDelta.php -0af5029f6f335b24c7191dec358f97c6 src/Legacy/Dbs.php -e564ccc9d6f171aed1c91d9f4c822d13 src/Legacy/Group.php -c78e37be4efa5f199a963e64c4812971 src/Legacy/LogAction.php -5b9acba859ed4889f7c0b8da3ba02b3f src/Legacy/Poll.php -cd111348556f6f096d43036b7c33f33e src/Legacy/Post.php -ba79f869b6f78568d66d783629b9b8ea src/Legacy/Select.php -855b9a46ede3a8f7178b960342067b62 src/Legacy/SqlDb.php -6ab4a62db7fb5aeaf3ac6b1877fb6736 src/Legacy/Template.php -bc99d6c0c2cdafcd7f58c87c5a86ea5c src/Legacy/Torrent.php -8581e7c8ef1e1651b38d2c47fb961fb4 src/Legacy/TorrentFileList.php -8d11128baed663e671e93bcd48c7b4e7 src/Legacy/WordsRate.php -830c2404bd7c6d87db96d3fac6030f49 src/Legacy/Admin/Common.php -2e3ae9928cc1fe2ea42c09ba9ffd3e09 src/Legacy/Admin/Cron.php -a0bc319347d7540e33c1fb947043fbe0 src/Legacy/Admin/Torrent.php -e48afb5c9b3d2061b6ee7ecd9420e074 src/Legacy/Cache/APCu.php -28efc4a7186bf40a0b9d8fa5148ec310 src/Legacy/Cache/Common.php -42acd132866d35424f70611d73be1b67 src/Legacy/Cache/File.php -b5296e047021e202df9f59519210fa96 src/Legacy/Cache/Memcached.php -2fcbbec4298fb50bee1f452c4fd213ec src/Legacy/Cache/Redis.php -638ec456abb95c99f3c15cac4d35a35a src/Legacy/Cache/Sqlite.php -c208a1a46b07d217eecd3e9272dd7ad4 src/Legacy/Common/Html.php -b440c784239de94c73dbcc727568ad52 src/Legacy/Common/Upload.php -fb0b9712502f92ba2ea489bf1713b5e8 src/Legacy/Common/User.php -b9072c7360eee4db0d0e094105541e5f src/Legacy/Datastore/APCu.php -d4db6c4c3b748be1a64a3500e51a79bc src/Legacy/Datastore/Common.php -e5a3607295b53e7bcb0632b1c86dc378 src/Legacy/Datastore/File.php -0f16163e128cc9978fb8172bcca3a421 src/Legacy/Datastore/Memcached.php -56cc7e64785d52964a5c10a082df2a8d src/Legacy/Datastore/Redis.php -1a26e13b4c5cfaab20b71bc2c5091a8d src/Legacy/Datastore/Sqlite.php -2206eb5b13b1c005eba6efbda6c99c91 styles/images/bad.gif -ea16980ab437fa6ba4aba3d480e83e9e styles/images/folder.gif -fb202097786ebed98e4428a3bdc4e490 styles/images/good.gif -2f940aee425c1e0ebd20b5dc38be13aa styles/images/icon_clip.gif -c680ae8c497740efb3c159910a3ede30 styles/images/icon_delete.gif -37c85bb7b0f634b81f48da75f0a2ed0d styles/images/icon_dn.gif -5b39a9feb12a0e5603470d3e44bfd312 styles/images/icon_edit.gif -5a854fb540e10d7f448dc07f226c799a styles/images/icon_external.png -54a21fb711be2b44c12ba02b37ffbd4d styles/images/icon_run.gif -36ee6976774505e02c7b087473df967a styles/images/icon_sync.gif -775f6873fce09a554ff62f811f43e38c styles/images/magnet.png -f2519a0272a9053eb83d8ca3722f89a1 styles/images/magnet_v2.png -c25b136c1cb3bb145495c25b35d93754 styles/images/page.gif -8e9c7ecd029a147376a5d021d1a26b9c styles/images/pic_loading.gif -df3e567d6f16d040326c7a0ea29a4f41 styles/images/spacer.gif -1d37aba5d803be8ed8aa4d522e88a5b6 styles/images/t_info.png -4bd92676b6f65414ec4091497ddd962f styles/images/tor_gold.gif -7817f590919ff06dbed3f0d784de3ad8 styles/images/tor_m3u_format.png -d27ca1228ceda346cab456312dac765f styles/images/tor_silver.gif -b467f4c7591d16bd92dabeceb66b1f1e styles/images/user_offline.gif -a3477f6aa31893c9ca03d7bda9904925 styles/images/user_online.gif -5bd78b40190fc596411e46fda8ee0250 styles/images/clients/Ares.png -f4d16cee90b63a7c138932c6dfd05566 styles/images/clients/Aria2.png -c570aadedb9262084de95d51b7631dba styles/images/clients/BiglyBT.png -289f583782ad2a09df78d15fa9372cd2 styles/images/clients/BitComet.png -cf8060e3f5138ddbe88940cd3cd245f3 styles/images/clients/BitLord.png -d89e0ab630bf64b1abca7e697ba9e622 styles/images/clients/BitSpirit.png -dbba578922c17f0c05966b2522e8fd0c styles/images/clients/BitTorrent SDK.png -e5b26496955539f50e97daeacc3e190b styles/images/clients/BitTorrent.png -ec9ad8e6c8e4a73f1c9d3c881395ca79 styles/images/clients/Blackberry.png -8872f0508ff7f981ad05feacf0e93d3a styles/images/clients/CTorrent.png -cdc0fcfa90bd2115e3298f39c52797d6 styles/images/clients/Deluge.png -0363ec9f9b6ec5eb6c2f57e00e7a07ef styles/images/clients/FakeUT.png -ebc3f28887e15a5cc5513106ed4890ad styles/images/clients/FlashGet.png -262ecd195bd32fbc9db7ea9d7143d4da styles/images/clients/Folx.png -893ed833c72ff628ae4fa37565e2f26e styles/images/clients/Free Download Manager.png -3e047b780a20a31165ffc23550ac8334 styles/images/clients/Freebox.png -15f2a9e98f3784260979cfda786c43f2 styles/images/clients/Halite.png -26c3936e8a0565f4982acc2d10972572 styles/images/clients/KGet.png -69769627890830b9009e828ac5f52e14 styles/images/clients/KTorrent.png -d1788d9bb1ee7812cf7b1585e2acdef7 styles/images/clients/LibreTorrent.png -cd8b675df235c45968cc83fe34a43e2f styles/images/clients/MLDonkey.png -d748d5094fcf07cb19872f240876f861 styles/images/clients/MediaGet.png -1868b496927ca81aaadd38e9ae030c75 styles/images/clients/Monsoon.png -e004453538bcd9e3a89da472caf7f854 styles/images/clients/Opera.png -0ff036300129e373a9bb780683739f45 styles/images/clients/PicoTorrent.png -cb0130e70edd12b31588c0f376e7613e styles/images/clients/Tixati.png -dcbd2779deb270fa4e602ca8801e592f styles/images/clients/TorrentStream.png -5bfa7545250c5019ed5320685102e23f styles/images/clients/Transmission.png -531859741b96bb4aee7a7d0b26345202 styles/images/clients/Vuze.png -a97dbf6a30f0e82b617ed9aab36068dc styles/images/clients/WebTorrent.png -73f1bbde8aa6785af7b09c366eb7eeee styles/images/clients/Xunlei.png -f2326f65c7fa758045e99e0d114402d5 styles/images/clients/libTorrent.png -013c9756e0f3f76de7c61f44480fd452 styles/images/clients/qBittorrent.png -a951b83749624c4a2fcf02cd7fd4b276 styles/images/clients/tTorrent.png -fb8ab4863228de631691d34116f91d41 styles/images/clients/uTorrent Mac.png -13a3a5099ab30724f1546600f742582f styles/images/clients/uTorrent Web.png -56c84de97326662013132bd6f0b8955d styles/images/clients/uTorrent.png -3efe9dc2d2e620997deea5c4137df77d styles/images/flags/AD.svg -956b4f4b79831a21d5fe73b02fc746a2 styles/images/flags/AE.svg -e786c7f8917a895f5630cdb961ab1a08 styles/images/flags/AF.svg -2b9abaa53a66d1296f5a91ef98ad4ab9 styles/images/flags/AG.svg -4ccf13659970e3bff945a407afaaa44f styles/images/flags/AI.svg -a8f8b9dbd244426eb8b79a3e5ca5e878 styles/images/flags/AL.svg -39c5d05ed3ce2660746bf8ea995af707 styles/images/flags/AM.svg -e8691deaa464bd0dfc0cc5d02e0f8dbb styles/images/flags/AO.svg -d96624823ceaf3950ba1b197e1f0b99c styles/images/flags/AQ.svg -9324a7ae60b38b0bc1d0b4cf05fa309d styles/images/flags/AR.svg -09a95c272ce53b3f79cbc22323bb651e styles/images/flags/ARAB.svg -9ab79f21383e883b3d94da6acb514b64 styles/images/flags/AS.svg -8dc68995ec419a9440a25fadc2d8193d styles/images/flags/AT.svg -26b17d670b64aafb25fdaecf3b74e934 styles/images/flags/AU.svg -76fe9474d96a84a4f984697f84812eb2 styles/images/flags/AW.svg -62ea912b0e8803281b06875985d1c656 styles/images/flags/AX.svg -e22a754269058c7dc7ba83044de5ede0 styles/images/flags/AZ.svg -010ce0adb7de5e927813a3e1ad0eb39c styles/images/flags/BA.svg -26b1f97e2fd0732b7073d7d3d0331aec styles/images/flags/BB.svg -e99cb11fdae12d94bce83d228b052dc3 styles/images/flags/BD.svg -0d72048ba90512a794c881b1b26fb5e0 styles/images/flags/BE.svg -4755cc0eeffc214e72703111d483703f styles/images/flags/BF.svg -5a32d80ff45984bc53108bc3138df0e7 styles/images/flags/BG.svg -86725006a063c2db6d6b0ae08d2a2ae5 styles/images/flags/BH.svg -3f52178a68c68470929390c75a5b3d39 styles/images/flags/BI.svg -7f6166b56e8697232afee3eec2516b3e styles/images/flags/BJ.svg -9dc30a69d4ead9865c5237c7855dd278 styles/images/flags/BL.svg -422bfdbb62c8af93b6e750b9f007ffc1 styles/images/flags/BM.svg -8514485898f8d87bc949c2d1d6701d5c styles/images/flags/BN.svg -26c18b3a7351ab0e7921321575899d45 styles/images/flags/BO.svg -63fa6eef889e055a5af0496cf8c8adfe styles/images/flags/BQ.svg -26699bfdf00895e39cd66cbcb23772cf styles/images/flags/BR.svg -9fc1437aae317caf48c9cf57506978ab styles/images/flags/BS.svg -2bc8f9b3b3d436e9200087a5166d6de4 styles/images/flags/BT.svg -4a3cbeed34e0e6032a444b5069a94ff3 styles/images/flags/BV.svg -2f0ecfbb57512a7aa257a9695003e7d8 styles/images/flags/BW.svg -a521eebe0cec830d57059207aeb47f7b styles/images/flags/BY.svg -f87924dc26e79e71e65975719894affb styles/images/flags/BZ.svg -c2594215477ecbfa1d0f8d2dadb358a8 styles/images/flags/CA.svg -a5ef984c9cf2502d2b92a7eafff66a8a styles/images/flags/CC.svg -b0b418db3a598e6fc240fe6dbda56de0 styles/images/flags/CD.svg -e0e7f32f0b2bfa01a5ff612eaa23e8c7 styles/images/flags/CEFTA.svg -99c6b22d8c18aaab72d05274aad88b9a styles/images/flags/CF.svg -9a9941443b3fb1958cee56c5a5c41915 styles/images/flags/CG.svg -269ddab4d19b9c60a6459c09ddfd48c9 styles/images/flags/CH.svg -71b3f6b842edddfcbd0c964f6c45d7f1 styles/images/flags/CI.svg -ae3ea163a41e7acc6ec68d293ee62911 styles/images/flags/CK.svg -e9b67a59841886e9b55fff67f1260909 styles/images/flags/CL.svg -e97d922e36f1702627e033b6d936f143 styles/images/flags/CM.svg -347824ed3b1806718c8881e7e2f13697 styles/images/flags/CN.svg -eefa6c2cd269ce7da90dc5ac0d78a48a styles/images/flags/CO.svg -8621f432232c7d0fe0a2660d04ed684c styles/images/flags/CP.svg -8f9e3dcc8f47407f57dd2eca6721d415 styles/images/flags/CR.svg -1f1e7f63d2df2bece82506bfe888e15d styles/images/flags/CU.svg -f0add59ff3bbb8991c713261ccab8cb2 styles/images/flags/CV.svg -fa095496b50c4e4daca119cc11338051 styles/images/flags/CW.svg -073c87bcd28790de571034bb99c74c36 styles/images/flags/CX.svg -132f9119797756fa74ce6b5a3572bb05 styles/images/flags/CY.svg -859f18a5acfd4e8d702a9b3d539dfd2d styles/images/flags/CZ.svg -1ac7b4da00270d49d6346a2464225414 styles/images/flags/DE.svg -32b2c1e78144f683e8e1dbdb8eaf5f41 styles/images/flags/DG.svg -a77a7f76b479379c259d5e7f38462cd8 styles/images/flags/DJ.svg -33bba71c12896b2df18901d98cf2b62c styles/images/flags/DK.svg -40bb9498add2e32ea9649444ae7ee2bb styles/images/flags/DM.svg -ce69db043d938ddf14bca0437ed63e9b styles/images/flags/DO.svg -b37c4fcf5782f19c46c24f834a141bb1 styles/images/flags/DZ.svg -32ef8dde770d390364de7375c4d90a6a styles/images/flags/EAC.svg -5856e48d1e8c52a9cff240e1f38d5513 styles/images/flags/EC.svg -dea402897eaacf7e4f92534fef7db868 styles/images/flags/EE.svg -cb98de29d9f1a3dd5510fdbf6ed6e82c styles/images/flags/EG.svg -9429f8630905a34bf96fa1631dfeb847 styles/images/flags/EH.svg -692c2f369c92943c3a17e2ff3d8d340e styles/images/flags/ER.svg -3eb3a35a978070fd4a68db545c527b54 styles/images/flags/ES-CT.svg -b3da1c5c8163dc418c4ac30949fca0f7 styles/images/flags/ES-GA.svg -4abb6c8e4cff61ae92c92aa69e800b50 styles/images/flags/ES-PV.svg -9305ebd7dca8be2bc0ae16186da8ce01 styles/images/flags/ES.svg -4e95cb382ed9d13e3e6be16c2ad09a18 styles/images/flags/ET.svg -2eba7797bc8552cb2b4cc1e200657bff styles/images/flags/EU.svg -0e5ef3f583daa1a415330bed83ce8c4a styles/images/flags/FI.svg -4d3cacd26ce60f45e91caf7dd8e85af0 styles/images/flags/FJ.svg -d1f6fed1a35a1e4cb4eb62c85a7a689a styles/images/flags/FK.svg -97c5bb37d4fd9285c80c3809c9dedde6 styles/images/flags/FM.svg -3f2be9ccbe5a3d0cef9da5c7044bba60 styles/images/flags/FO.svg -bf4cae9b80cd98ef576670139bdb167d styles/images/flags/FR.svg -f64e29ed68d2165d3620d53978933bb6 styles/images/flags/GA.svg -7caecb785400d1cca7b319887a9d81bf styles/images/flags/GB-ENG.svg -ec2525533d5438013f1b8a3a4b194157 styles/images/flags/GB-NIR.svg -ade55ed456211d6577b2f80c06e40c51 styles/images/flags/GB-SCT.svg -9490411928d3db5cad64a17d7c2c9f8b styles/images/flags/GB-WLS.svg -6dcadf6916764560c2f1fec586e2c1de styles/images/flags/GB.svg -fe81c3d2f93435ccefbe87672a79b0e6 styles/images/flags/GD.svg -63b0311486e63f08f53dffc38591a749 styles/images/flags/GE.svg -333751e55034c41c3e59a55e47c2edb1 styles/images/flags/GF.svg -6a608369d5207ef50ef840171aef8d40 styles/images/flags/GG.svg -a64592b4513a2648c11e6e00d1a1d158 styles/images/flags/GH.svg -9b7904df38911a3cfc6914638eda5322 styles/images/flags/GI.svg -c6090a99ab0402116f4ab70719eb034a styles/images/flags/GL.svg -21b07ec656b24882173b9760792b7691 styles/images/flags/GM.svg -f1d6c153def70087cff4f84c49ee2fb2 styles/images/flags/GN.svg -0973d50eb05aff4255d8e499c45c5ed3 styles/images/flags/GP.svg -d352f9e1d900d17b2d7805f172827df5 styles/images/flags/GQ.svg -71452bbd08d693543125cc15f5943637 styles/images/flags/GR.svg -c7e0feea258c2cca78d0325187ddd9b0 styles/images/flags/GS.svg -55a2d0d8fcc433cad327adb7c766fd29 styles/images/flags/GT.svg -a269eb55697d0c6c77efe97bcf6c4582 styles/images/flags/GU.svg -9e32ba13d46c36531bfc3511d54e521d styles/images/flags/GW.svg -6cd4096e5ba2f34748e7938f6f1b075c styles/images/flags/GY.svg -406844d22310061e566f2e82f743e014 styles/images/flags/HK.svg -d13f9cb35336040cbd9648c88f9d4ada styles/images/flags/HM.svg -57160f534d227ae78c5cb8381a75a37b styles/images/flags/HN.svg -924316bebeafe8708e7c6192598f54f3 styles/images/flags/HR.svg -fbefe6c8144249156a236032ce238052 styles/images/flags/HT.svg -966f49336f7466efd6f8dbe19f9fc300 styles/images/flags/HU.svg -bdc9877c5d42dfa5adcfb488fcbf153c styles/images/flags/IC.svg -f5aa812145ee85fa05e5f2b62bdf030e styles/images/flags/ID.svg -1c12635a2932de4b8036779933a84d97 styles/images/flags/IE.svg -c0a0925b76528c896afcf1b113bcc366 styles/images/flags/IL.svg -bd01c1fac7881d08d8664cad9e4f1712 styles/images/flags/IM.svg -230b82c4b877a6af4ea17b5e9d751b9a styles/images/flags/IN.svg -ea42711e96f15d9cabb6c8df03ee53f7 styles/images/flags/IO.svg -af0a1cd4071dfaccbea8ee0b372867e1 styles/images/flags/IQ.svg -1348920da6e96ada40978fd661eba1f9 styles/images/flags/IR.svg -dd9622551b169bddb9e9f99d9b97cb54 styles/images/flags/IS.svg -1d72a5dec3acd073763570e3e5fdf784 styles/images/flags/IT.svg -aa6a92cf396220f532680ce33e3394ee styles/images/flags/JE.svg -4370e5279f135a52435cb1435fb51d25 styles/images/flags/JM.svg -8523785fa25192569f1fad7b5b4d2d57 styles/images/flags/JO.svg -22e3b3a4abbb24945620817fd27ed7db styles/images/flags/JP.svg -6e6a47cb574c6895a0e7086cb52390a1 styles/images/flags/KE.svg -05ee6fc39b40e022ce4b145edb3228e4 styles/images/flags/KG.svg -747d70423432b8fb38f01540ac7a5e63 styles/images/flags/KH.svg -3d5138694fec5d7bf41273ca36bb337a styles/images/flags/KI.svg -a68238693856a7f909ce0bad9ab9e8fd styles/images/flags/KM.svg -170a2ee40bdc3edacff21c6dacd1964b styles/images/flags/KN.svg -9a2bfbfb50d45a9eebc3323f574f372c styles/images/flags/KP.svg -2a183310b78d3d4fe57f88abcc491fcd styles/images/flags/KR.svg -2e0484c010807a0dca638bca095f76f5 styles/images/flags/KW.svg -ad95706495467ded86ea48158beb186e styles/images/flags/KY.svg -78345683b07a3edad7eef7fceeaeb819 styles/images/flags/KZ.svg -038868d86f685b19f34bad6d7169c4df styles/images/flags/LA.svg -131d87eaaff3b7d27506dde3aa0aad59 styles/images/flags/LB.svg -dfc467ded9d00d68e775e15337fe5214 styles/images/flags/LC.svg -008d5c0fcad42cf7c32fbab9c1451e27 styles/images/flags/LGBT.svg -2e6f9feb6638def6fd68402651a96e64 styles/images/flags/LI.svg -c850d42d21d5f44559648ec61f12738a styles/images/flags/LK.svg -8483351ab6b981aae3b236c79ac62753 styles/images/flags/LR.svg -0ed298ed0de87d001d82365008bbcdd2 styles/images/flags/LS.svg -7e7110b65bbe5cbfb8a84a0e5f68284e styles/images/flags/LT.svg -7f70b02c8514c31fc4de448b419ae0d6 styles/images/flags/LU.svg -0b4e6e1a21a939a1a474341da5aee4ca styles/images/flags/LV.svg -b180a3a13fbcd16816afecf0cf994609 styles/images/flags/LY.svg -a2e6a76e5f38058fd28b706beeb6a1b7 styles/images/flags/MA.svg -acbf04f75fb877d1c2aef0f553c8d629 styles/images/flags/MC.svg -0983e53850306ce10aef34119d2ff9ef styles/images/flags/MD.svg -95e5486fa1ec8c0b40cbea3c129c8cc9 styles/images/flags/ME.svg -308936fb3b99c9f642a531cb98876560 styles/images/flags/MF.svg -7a54f12dc753217b1c0aaa7bf685f9fe styles/images/flags/MG.svg -b4e4c149e97d696789949136387f2840 styles/images/flags/MH.svg -b96b8a63c2939ef1e4cebb9585908591 styles/images/flags/MK.svg -1dd7a9ccbcd179a5a3fba550970ad75c styles/images/flags/ML.svg -c22f7c51912ae5c86cc9b9a61def3be9 styles/images/flags/MM.svg -460f99ee9683d81a964784baa0d6468a styles/images/flags/MN.svg -4fe6113a7240c30e154219f49cceb471 styles/images/flags/MO.svg -be962d7e0ceb3e6e6ee3c65d173af3c5 styles/images/flags/MP.svg -1a77ee1805087d17c9b4bf21ad372a1b styles/images/flags/MQ.svg -9cfe4f568983d03d3b9c32e12710096b styles/images/flags/MR.svg -83137d6527dc1cd2eb21803379a858df styles/images/flags/MS.svg -1e1fa38f7cdcb7586af1a76a68d96644 styles/images/flags/MT.svg -46514c8008dc3564e49eaa790f28e255 styles/images/flags/MU.svg -44a3b21f0ab17367c095a8798f7cc4da styles/images/flags/MV.svg -55564ea6677819f140f41b09aa361c68 styles/images/flags/MW.svg -e9e40ad9cc83bdc167c4d75c16582f30 styles/images/flags/MX.svg -50be507f7ddce55f869e4f40773aba5a styles/images/flags/MY.svg -306bcd4e70d09750dc2fc32ba17fbc96 styles/images/flags/MZ.svg -f770c272591ef4e6a20819cb32532799 styles/images/flags/NA.svg -e1238c4a4e36f391ad064aa0620f0c05 styles/images/flags/NC.svg -5c109026a107f910512b09e208a90538 styles/images/flags/NE.svg -335f75bc98077e9333ea5a973f1b0667 styles/images/flags/NF.svg -9eea84efdc0eb2553b9d3502feac044d styles/images/flags/NG.svg -ecbaae2917389d456842961bce9c2115 styles/images/flags/NI.svg -f685765a298db5ba59fddfa6de08020e styles/images/flags/NL.svg -859a13561a1b24bfa65fb1a03835da49 styles/images/flags/NO.svg -0d20f58b4f5d89b07aed6b4376e8030f styles/images/flags/NP.svg -b3fdadbc923b5a447ec89bca7c69d213 styles/images/flags/NR.svg -bfd6de48e40574ec6d86c6e0589baa48 styles/images/flags/NU.svg -229d2fadba8d00df102927eae199d46f styles/images/flags/NZ.svg -f1bb8fdfb6e482541c1ff824f179bc81 styles/images/flags/OM.svg -b6f6c58d78ffe67a54f46163232a8e1e styles/images/flags/PA.svg -8def5dbc24f757a958e42aa324699a21 styles/images/flags/PACE.svg -9210ef6f3debc3dd50420f2dc92143f3 styles/images/flags/PC.svg -5156eee1494fa9ccb9ff78c95f6053d0 styles/images/flags/PE.svg -2bd5b79dc0b6bcd8d0987359388811c8 styles/images/flags/PF.svg -03d02d876030920b3433d0fa3402ab60 styles/images/flags/PG.svg -64c3d8b03bf21d10661c2384ebf3247f styles/images/flags/PH.svg -e2cc1a304efcbe0a7670358f0aa9a1fb styles/images/flags/PK.svg -f7adaa942c63ca98f1d2362bc67c45e3 styles/images/flags/PL.svg -6999a852eb77bd0a5218ccc09be1c215 styles/images/flags/PM.svg -55290b5e84eec90b3d6313d765602b2f styles/images/flags/PN.svg -3d6afa7282f19e68fe5ef48648bc6dce styles/images/flags/PR.svg -f0d9916c4b0d38f4ff6a103e87f70009 styles/images/flags/PS.svg -2b7d0d7a132f0b15bd86ba798533ded6 styles/images/flags/PT.svg -98481f768696b21b1cefe1c2a3c83fb7 styles/images/flags/PW.svg -98e0fb12753083c222eaa987941d9853 styles/images/flags/PY.svg -6b0bfc63e28cf03deb8794d8c8ad8460 styles/images/flags/QA.svg -93aac5219d4b4cce2df6460ee023daed styles/images/flags/RE.svg -e9130a28a9ba2b93433f21a2cd5971f3 styles/images/flags/RO.svg -6fd10859e76bfa6e38d9e7b31fc9df14 styles/images/flags/RS.svg -ab61f31edf4ad95b5ae00aff3be99197 styles/images/flags/RU.svg -32931738c195dc60323ab760f3b3b720 styles/images/flags/RW.svg -cf69a304260a4a933cb701124e309324 styles/images/flags/SA.svg -54215c8c6e4973b16535240f796b55a6 styles/images/flags/SB.svg -ab4767bc4088728a6841e7e578f6c7a8 styles/images/flags/SC.svg -00f69acaade5d14c00e36d841b5e9b23 styles/images/flags/SD.svg -79da0f189e8fb82d6e148a77b5690e14 styles/images/flags/SE.svg -b8d345820ac52f8187155ff5c79ef5b0 styles/images/flags/SG.svg -73afca9da781f8995e9a439a8e452832 styles/images/flags/SH-AC.svg -d061c3274d003df95889198605c5cbc5 styles/images/flags/SH-HL.svg -603cf87ed3b1931e1a3c0f76b7a746ef styles/images/flags/SH-TA.svg -d264f1845336248617b786cb0e07d5aa styles/images/flags/SH.svg -87f8906e1312f966a871372aff305242 styles/images/flags/SI.svg -5b6dddaf6a82ad8090d313f3088b7e2d styles/images/flags/SJ.svg -e6276ae1f8d0435ca037dcef60c7bd42 styles/images/flags/SK.svg -af0884d411f36ff8e0fb199a00b70691 styles/images/flags/SL.svg -51b68507d2fd5122982e5869a7366476 styles/images/flags/SM.svg -091e42c6f8d95a1740ff343dcec62c7a styles/images/flags/SN.svg -3f60af6c70394d4b58d19f9873151a82 styles/images/flags/SO.svg -07e91c157e4b9e240d9b004da3529f08 styles/images/flags/SR.svg -0678d330e69d1c83ed22e43b987a8554 styles/images/flags/SS.svg -7435c1629c29775dd2c9a81bb858a9e2 styles/images/flags/ST.svg -d9f443f6087723fe17a478a86099e908 styles/images/flags/SU.svg -cce567b20572cef99528932d04203aff styles/images/flags/SV.svg -f1c67d3de9043585ec21e1505ee99692 styles/images/flags/SX.svg -c425f6f3f542073c8fb2b6b1e2e6c9b8 styles/images/flags/SY.svg -e8639cc922903a2ca7d4832268f93783 styles/images/flags/SZ.svg -c5f877e2a790db90832fdcb5e6255c49 styles/images/flags/TC.svg -983e8a4ce97f1e3c1cf0e01ee2bc1a74 styles/images/flags/TD.svg -3cdeba0c214a07003512752047e6ed9f styles/images/flags/TF.svg -bffc7318c6ef969182842ace78f667ec styles/images/flags/TG.svg -bcc03a3cd1a367274a2444aff71c0a68 styles/images/flags/TH.svg -afcc048680a1943c465351126e378a02 styles/images/flags/TJ.svg -c868bd901f17042f63d97266d2f3055f styles/images/flags/TK.svg -ed0c55931d9e4acaa3232a6fd90ecdd1 styles/images/flags/TL.svg -40a22bdb10ae731b59bd27b7377ac0d4 styles/images/flags/TM.svg -1e2cfb1bfd06ab00b1a5ac9263b7c444 styles/images/flags/TN.svg -cccdba4c3dfd080aeda7302c23588c7a styles/images/flags/TO.svg -a00c7dfb9e8aad298b6bc1ce656dd9ef styles/images/flags/TR.svg -12c225a0602ef42490ab814b5ade9274 styles/images/flags/TT.svg -c75afdde63ae0e1e205c5dfd653afffe styles/images/flags/TV.svg -a4b47fff88d0596123054bb88aaa2ca2 styles/images/flags/TW.svg -52d064016a82b03c1e59cdfc054ab303 styles/images/flags/TZ.svg -6d944bf795f95c09b2f78819af42db89 styles/images/flags/UA.svg -b26f273c47046c6350612f18f1e50f6e styles/images/flags/UG.svg -f2ba7f8f8ad272e4335c51579b0b1025 styles/images/flags/UM.svg -388abe60469197fdc93f5187b818d4ca styles/images/flags/UN.svg -1d23b9509d0a0a828e3071096b0d2edf styles/images/flags/US.svg -7942bb43f1e2a75c4d81d7a2c569faef styles/images/flags/UY.svg -c4be51bb2b634168ef4325784b53bf62 styles/images/flags/UZ.svg -00e5a3a7a774c4ed50b8384db8d1e910 styles/images/flags/VA.svg -4bde18df266caa82f34338109dc9dd95 styles/images/flags/VC.svg -5a76b2497118fb0435b2f5845717b9b0 styles/images/flags/VE.svg -672b07c43dd562fcf7860737c6558867 styles/images/flags/VG.svg -e2ccb9c0bb14286e54aad5d0a46c992c styles/images/flags/VI.svg -076d59568fc7a8ab59bc51ee7a39f956 styles/images/flags/VN.svg -89beef37118b70e51139707c1ed75e52 styles/images/flags/VU.svg -7313ce51d6c57ad8faaa9000658969f5 styles/images/flags/WBW.svg -a3008b9d6f65356b95cf8f465b3eddc4 styles/images/flags/WF.svg -096fc50015e936e5ef310183baab82ca styles/images/flags/WS.svg -20ebf98231858eee3327b8c1a0006af8 styles/images/flags/XK.svg -c15ffa45806fe02417d2bd22e6bd4fca styles/images/flags/XX.svg -b45153c68c2d4ccaea6553357ca603c7 styles/images/flags/YE.svg -38abb75fbdee89e313565bf814710692 styles/images/flags/YT.svg -80dc4e8e3c8b363576df89dba9aea7fd styles/images/flags/YU.svg -da9e50f2ae3cc80343b9be4f2a5f599d styles/images/flags/ZA.svg -8d658b4d10c327c9d9c74cb524806d60 styles/images/flags/ZM.svg -758f0d5e6878605069d968f24004f244 styles/images/flags/ZW.svg -1a67af12abe2538dfa2478d606816991 styles/images/logo/logo.png -9d9aedfca4997a9a47a03333ce4d07d0 styles/images/ranks/admin.png -d98ba5dacbfa77089376c68817c1deab styles/images/ranks/user.png -3f63413df4d83dced7f48ba3d93a68b2 styles/images/smiles/aa.gif -b0659e0056a8ad54b1cf730bb92a9ea5 styles/images/smiles/ab.gif -94b6c42b9d7d1f3e5c0b8c44203c6b08 styles/images/smiles/ac.gif -2b7f05b2c6c95faeec34bc67c2b56074 styles/images/smiles/ae.gif -fd944578cb4d52a905d6016cffd04932 styles/images/smiles/af.gif -91155cfc1291a6c2aa38b627fcdcbf6e styles/images/smiles/ag.gif -a30b565313f30a27dfe96200ab841a8f styles/images/smiles/ah.gif -8818892338a22c6790f48c734875744b styles/images/smiles/ai.gif -4eea548f31c765983d43607f083f85f4 styles/images/smiles/aj.gif -ab7358826d086057eb8e1190f9777965 styles/images/smiles/ak.gif -7ad4b54a58e9caa290e2affd752b6a1a styles/images/smiles/al.gif -e06e6f5326394f6c5c455c65b72d3ea8 styles/images/smiles/am.gif -ecab38fe6bf1ae4ccddce445f86fe6fe styles/images/smiles/an.gif -c00e91bc3dea30ec5605ae6bc7f293d7 styles/images/smiles/ao.gif -3d627590642c9053b83d7a9c7bd8fcdf styles/images/smiles/ap.gif -81f0f506655f2dba90154fbf1a4303b5 styles/images/smiles/aq.gif -3efc78ccc34ca5c9d56624e9a6cae5ef styles/images/smiles/ar.gif -df4b21dc8fd07211c49b525fdf3b6081 styles/images/smiles/as.gif -0a493856e0d8352c3f6f0642a7e438fd styles/images/smiles/at.gif -4dc56683c50927dfe1c9d6c60f6372a3 styles/images/smiles/au.gif -7d6575597060d5615fd4d27afc688863 styles/images/smiles/av.gif -0fefe2f47b92a68afa1dd43980ffd65d styles/images/smiles/aw.gif -594f275a1aa5a994b173ada43efa3d0f styles/images/smiles/ax.gif -ead299fcde549b52014b72ca74098b0d styles/images/smiles/ay.gif -2a4452e6548da79b3692ee9d4f1aade2 styles/images/smiles/az.gif -82a0ee94a7a781f217b2691c8c97df1e styles/images/smiles/ba.gif -7bc58969a35add4147080610bfa6cc11 styles/images/smiles/bb.gif -85776adeff3397fdfc75dd19cb2ccf38 styles/images/smiles/bc.gif -1520564f90a4b1d8665fe4f06d848780 styles/images/smiles/bd.gif -50ad7164d7a437a9e4e8fdc46ee1da28 styles/images/smiles/be.gif -cc27d7d23647d2b59a794bb9f0cbf782 styles/images/smiles/bf.gif -d87534c2232eb423472bd0cd91e07b51 styles/images/smiles/bg.gif -47823df7e3c55e8053ad3e48d2727359 styles/images/smiles/bh.gif -516be119793dffe2130ee40b5b46129d styles/images/smiles/bi.gif -469e6e3c3770b91f2456874d208c84b9 styles/images/smiles/bj.gif -73f903acc41b0685c179706eeec99766 styles/images/smiles/bk.gif -2c29ae69e72308445a5c20c904a50715 styles/images/smiles/bl.gif -8d8c01a46b8d3b47ff79451598ab51a8 styles/images/smiles/bm.gif -d01f017900d5bb31546a5307ab9a162e styles/images/smiles/bn.gif -4828dd8f1db556dab732f7598eeaff4e styles/images/smiles/bo.gif -94a2443a27934bbd57d29b93b18fd580 styles/images/smiles/bp.gif -71473a1301a0bfc8e21b5d83032e44fc styles/images/smiles/bq.gif -e2aae032f3022bd640f19a877575fef6 styles/images/smiles/br.gif -f9ef1948459292cd038886ebc1566010 styles/images/smiles/bs.gif -edfd44d8b98973fa4a3ae263a4820ebc styles/images/smiles/bt.gif -03b84c6388bfc79f23e31fbac556032b styles/images/smiles/bu.gif -55c4b01ffae7a7ac0c56539f77b52e5d styles/images/smiles/bv.gif -f8b8db7865a1752cfaae498d75a4df79 styles/images/smiles/bw.gif -5156938a973d5ae8174723c3f9e84f91 styles/images/smiles/bx.gif -45e8f7f8702112524b719a006e5e53e8 styles/images/smiles/by.gif -5013903990e0fd41458dfed7366be691 styles/images/smiles/bz.gif -9c11c561505625da783b154a57f32dd9 styles/images/smiles/ca.gif -97f9722f4c011854d7c2a211848cd290 styles/images/smiles/cb.gif -924d1b8fea57f384b252066964da6d16 styles/images/smiles/cc.gif -670d8e594bd352680d58c47b5d3e8e6d styles/images/smiles/cd.gif -fb8118210980563a4256d690d2312bb7 styles/images/smiles/tr_oops.gif -931ae9b0ece1719fc7575d19c0b850ac styles/js/bbcode.js -e5eeb2e1eb2ce1d8b114489a3914134d styles/js/main.js -15f52a1ee547f2bdd46e56747332ca2d styles/js/libs/clipboard.min.js -4f252523d4af0b478c810c2547a63e19 styles/js/libs/jquery-1.12.4.min.js -7121994eec5320fbe6586463bf9651c2 styles/js/libs/jquery-migrate.min.js -d9fe55cd5531e895538f0d926c705f7a styles/js/libs/legacy.js -f235bd876ae8777d18c6abe25aaae81f styles/js/libs/oldbrowserdetector.min.js -02ecb6807d409b0a53a1a2f64fdb0303 styles/js/libs/printThis.min.js -35a34251072494629b5811bbde74199e styles/templates/posting_tpl.tpl -8bec3a1d43c1719d72b93d3e4197c7b0 styles/templates/admin/admin_attach_cp.tpl -021a3bef1483efb64a21aa253bd15a0c styles/templates/admin/admin_attachments.tpl -3ad97aeca995f7d48810dfb3b3f76811 styles/templates/admin/admin_board.tpl -1600291dbba00d1ed8025ecfd1306c2e styles/templates/admin/admin_bt_forum_cfg.tpl -cf7d3eaf7b6337eaf64c8d988934283c styles/templates/admin/admin_cron.tpl -f663d52bd0ed57d4d702c70ccab51933 styles/templates/admin/admin_disallow.tpl -640a7effc77169fa900cf45631649143 styles/templates/admin/admin_extensions.tpl -c60de3983e8508b2196663b8e86fe4e2 styles/templates/admin/admin_forum_prune.tpl -bbafb3ecd92363b003ae6aa9d4c7c675 styles/templates/admin/admin_forumauth.tpl -ccddce1a8e610d842e8656d117c979cd styles/templates/admin/admin_forumauth_list.tpl -b443695c6baf26f4fcca4f584bcde885 styles/templates/admin/admin_forums.tpl -37775ba627eb473dfd9aa1d8b6a55dc2 styles/templates/admin/admin_groups.tpl -de6dff09995e0af45241ea6abe3f374b styles/templates/admin/admin_log.tpl -bb1e6942e47cf810341eff26b19208c8 styles/templates/admin/admin_mass_email.tpl -539e40ed5373c7d7bafd08e168ac1420 styles/templates/admin/admin_ranks.tpl -14cb2f937a0cdebd14810bb82b5864c4 styles/templates/admin/admin_rebuild_search.tpl -e1338f36a195ef788264ffc2f246b761 styles/templates/admin/admin_sitemap.tpl -b3272b1907f53010aa984bed5fbe02b8 styles/templates/admin/admin_smilies.tpl -100a8007e96b51d20d77363dedcf99b7 styles/templates/admin/admin_terms.tpl -63648418ca2cd527d64620dc92a98f9a styles/templates/admin/admin_ug_auth.tpl -3600ffd781808cd501b6c774ac427a11 styles/templates/admin/admin_user_ban.tpl -63551b4021ef1074962f421489eba85e styles/templates/admin/admin_user_search.tpl -9f4a3d702b416ee3329b92ec68a88b00 styles/templates/admin/admin_words.tpl -210378fb854a5152ba98aae1b93d72b2 styles/templates/admin/index.tpl -73a8d3c64e2478a4d6b698bd78660319 styles/templates/default/ajax_edit.tpl -b48c2f4e08a302c4985f8b951d4818a3 styles/templates/default/common.tpl -7aaafafd6dd98c48c22c020d19232d15 styles/templates/default/filelist.tpl -9b6be2ef3c9af370331855db875c7e1c styles/templates/default/group.tpl -f0d47a2c951940d54a4d6b967f3664e4 styles/templates/default/group_edit.tpl -49bf9d1c9a5c89a5de40ead2dc8633bb styles/templates/default/index.tpl -25a62538518a912fca5e8b7f2def9624 styles/templates/default/index_map.tpl -45f3e6a16e3fe3b231223a1aee340514 styles/templates/default/info.tpl -9bae398393a00fb723f505f9c6bee2a2 styles/templates/default/login.tpl -90086ba7a0480890e669ee2d5c032e1a styles/templates/default/memberlist.tpl -529fb6406e8ef78037d9611e4e8e8023 styles/templates/default/modcp.tpl -10ede1eeae797aeb92bd9035ea2a7d30 styles/templates/default/modcp_split.tpl -4748b6e28643d6f217fb675be6c7526b styles/templates/default/page_footer.tpl -2c4c64a726aa440beda5fe9418decdd1 styles/templates/default/page_header.tpl -b590d094bf7108b2bcc90539ab7bef6a styles/templates/default/playback_m3u.tpl -4b416d49555a4d2741419bc5f0b3e7e3 styles/templates/default/posting.tpl -2f91bf82260ffabc3bdd7170fdc5ff91 styles/templates/default/posting_attach.tpl -ac53a7d2fed1d2e76ac7c2bc01a29e7f styles/templates/default/posting_editor.tpl -ab8110d87fbb3e1a57673372dd850aeb styles/templates/default/posting_smilies.tpl -d3181c6afd586e882d9811248b3eb73f styles/templates/default/privmsgs.tpl -c9a99d0d19214060b632912da3a60983 styles/templates/default/privmsgs_read.tpl -b74e2769709003cb513e20e3e7f37359 styles/templates/default/search.tpl -300be3175b1de04d664e7d9eaaae782b styles/templates/default/search_results.tpl -8d84b81fb47e874c4709bc98cb016b5c styles/templates/default/terms.tpl -76c6f79e79d60e8d896c8450ed9c90a6 styles/templates/default/torhelp.tpl -5ae6a68c238d22cf05d6004d95b5bdb0 styles/templates/default/tpl_config.php -fef55d3af92aa95086feaab6541fac4e styles/templates/default/tracker.tpl -c37c9f7a4f74fd2494ff2e1fc546a072 styles/templates/default/usercp_bonus.tpl -a3944779077160f5a1113d958afdc197 styles/templates/default/usercp_email.tpl -63049bbb19faaaffc69943a8b5dea7ef styles/templates/default/usercp_register.tpl -7c29f7cf6f006164ed2713f44a0d3493 styles/templates/default/usercp_sendpasswd.tpl -04041f3a3349536b507a1419ec1e8f5f styles/templates/default/usercp_topic_watch.tpl -8bbb539de7ac3f02c005bde8b5c36386 styles/templates/default/usercp_viewprofile.tpl -f37466c07dc18c24b9ce679339178187 styles/templates/default/viewforum.tpl -c502c65019ff2435b32a167c7253f3cd styles/templates/default/viewtopic.tpl -163fbfec41fb23c72cb5176fde713c78 styles/templates/default/viewtopic_attach.tpl -41ecb6ea79e55f4f3be97d08925a7b7d styles/templates/default/viewtopic_attach_guest.tpl -ba1231340ca2e66dca733d4713c966ac styles/templates/default/viewtopic_poll.tpl -a19e1cf643354d00f52dc03cf0142ea6 styles/templates/default/viewtopic_torrent.tpl -f7488502316c13b2aea8c4d0088b7343 styles/templates/default/css/admin.css -3c9ec0061eefd5d95f3305757be27807 styles/templates/default/css/ajax.css -22a276ce14493eac4f65e65d7a27e991 styles/templates/default/css/alert.css -e3e20b6f65ddf39a56d202ffa2d46675 styles/templates/default/css/globals.css -105636657c5fcd103fad671d7f59cde8 styles/templates/default/css/images.css -4379276ea7a9de8bb47381e92b31662f styles/templates/default/css/initial.css -4f0b48f003b5e8a5e7de801cfffcabd5 styles/templates/default/css/main.css -d0e75a4f857d1e3d47728bdd773b73fa styles/templates/default/css/main_content.css -5dc9a0ef877b77ade353bd9d8ac7cbbe styles/templates/default/css/menus.css -5d5ffb53256e948a3661fc3ce9d8e1fe styles/templates/default/css/misc.css -ff8475d3486565ba0cc42f64d5eba751 styles/templates/default/css/modern-normalize.css -1440a8c7c7c1b662f420d49ad1b31bfd styles/templates/default/css/page_content.css -740441e8bf51bf84ab00ca508901b915 styles/templates/default/css/page_footer.css -139aae886438f19d209df209bc0f31d9 styles/templates/default/css/page_header.css -28eb8e1caa7704cf848d731481d616c2 styles/templates/default/css/shortcuts.css -dc2b033e583a080d929f1a335051df68 styles/templates/default/css/tablesorter.css -b12a0709b0d1a08e437a2f3e9ab554dc styles/templates/default/css/top.css -a93174a6a86aa1f67e569fc3dd6c90e5 styles/templates/default/css/youtube.css -7d4b6cb638fd0ed8059a7bc48e7009ee styles/templates/default/images/aerobg.png -5c9f14812de65140b6b7583d4de1ccde styles/templates/default/images/arrow1.gif -0805d4db347fa60c4333b3b268292589 styles/templates/default/images/button.gif -fa992644b91e1013cc6d3537acb2c1a7 styles/templates/default/images/cellpic.gif -b12ea6d1b5682b02c7cb80a2682bdd9c styles/templates/default/images/cellpic1.gif -e561e3c8a63b904ea5c0f3e54200b2e3 styles/templates/default/images/def_button.png -df23d7896c3cce02a4a3984860ec6e35 styles/templates/default/images/def_button_light.png -c4f67820bfa47d936f5c84d6538865ce styles/templates/default/images/feed.png -c24c15c3b825897cf7c49be7c4acb906 styles/templates/default/images/folder.gif -f3faa6fd61e30af591b0c4f0a5972f05 styles/templates/default/images/folder_announce.gif -5348aa23b2a5af398e908c62de481dd1 styles/templates/default/images/folder_announce_new.gif -60fe30fc7b53d7c5b5a1294c138c421f styles/templates/default/images/folder_big.gif -a6e22cbd4d56be5363b789e73cc35f58 styles/templates/default/images/folder_dl.gif -46d6e6ca6c18cd348e7092b53b56a025 styles/templates/default/images/folder_dl_hot.gif -681744a05376d9dc14dd7b69b3f315f4 styles/templates/default/images/folder_dl_hot_new.gif -596d90f0bbda15d93cc8fb88b54ca70d styles/templates/default/images/folder_dl_new.gif -b6c3c6fa7a358941f243c807df2bb16d styles/templates/default/images/folder_hot.gif -d08375996ca1a8cf525a9b9bb2e2cab9 styles/templates/default/images/folder_lock.gif -e7187e5a8ef6344477f8688ff8c7e605 styles/templates/default/images/folder_lock_new.gif -0f786328d1348f8a014dad6d1487f898 styles/templates/default/images/folder_locked_big.gif -9fdbd1a531fbafa59e87a42034427f0a styles/templates/default/images/folder_new.gif -35a81f8830df6d9865328c989d5951f8 styles/templates/default/images/folder_new_big.gif -05c372ea480e241a4169b04972d3de07 styles/templates/default/images/folder_new_hot.gif -258a14c5f562c277149012fd33d7bfaa styles/templates/default/images/folder_sticky.gif -6a32effea0c6e74c808e23ef2a519885 styles/templates/default/images/folder_sticky_new.gif -107371063e56136b7863c09aba9a44c3 styles/templates/default/images/hr200_ltr_gradient.jpg -0ae0cab0ed0d41e3dd26ccbb8c17b4d9 styles/templates/default/images/hr400_ltr_gradient.jpg -8c3d9bfdd03e9ec56a21a02ea69240bd styles/templates/default/images/icon_birthday.gif -027b5739dd2eefda1400ca25ba0927c4 styles/templates/default/images/icon_delete.gif -990aaa9b58928327dd89f0887da7a088 styles/templates/default/images/icon_female.gif -307ba364fa588e84d5b9e8ac9fd85e57 styles/templates/default/images/icon_latest_reply.gif -6119bcdcc1df71c1a43f0a1356fa941a styles/templates/default/images/icon_male.gif -4cc6441439fd243f330619fa820ca2ff styles/templates/default/images/icon_minipost.gif -179c2efb0eea05c0157f17248ffb59a1 styles/templates/default/images/icon_minipost_new.gif -623600e98e855e8c6979a7c3e5f17495 styles/templates/default/images/icon_minus_1.gif -c56a88ab41e609ae46bb76b8e0fa3c96 styles/templates/default/images/icon_minus_2.gif -ba0ddbeb3db36ab78aa492089563340f styles/templates/default/images/icon_mod.gif -21e0d9f806ef22adfd8049f71275cd5a styles/templates/default/images/icon_newest_reply.gif -41955ab9acd95c294034779eda0a45e5 styles/templates/default/images/icon_nogender.gif -a80048713675f927b56cb662060fca09 styles/templates/default/images/icon_plus_1.gif -8d30d52e229145553695ccb3321b66a4 styles/templates/default/images/icon_plus_2.gif -db6bed92407125922ecced186dbca7d3 styles/templates/default/images/img_alert.gif -548aa4707657c575da6afdf409d1322e styles/templates/default/images/link_help.cur -00ef871b291bc03a497d608a5bd8ec99 styles/templates/default/images/loading.gif -5e125b5752dfcc94b47ba8d26c818ddf styles/templates/default/images/menu_open.gif -bfbd67afd46e50a0e5c354658ba6b56a styles/templates/default/images/menu_open_1.gif -071ff6f0fdaf3a8576f62cbe68f9b7b7 styles/templates/default/images/msg_inbox.gif -86fff8abe800ef10525db12d14fcaae0 styles/templates/default/images/msg_outbox.gif -0969ed02a43491f1045d4baf3facd981 styles/templates/default/images/msg_savebox.gif -d7e5639de1af6f748fda9f576c4eb4cc styles/templates/default/images/msg_sentbox.gif -f0b5c44c28d28bb8d8f132d4d69b19ed styles/templates/default/images/progress_bar.gif -f5ca8b594d12740edfa28765175686d0 styles/templates/default/images/progress_bar_full.gif -df3e567d6f16d040326c7a0ea29a4f41 styles/templates/default/images/spacer.gif -f89085f930953bb04ccb78762de620af styles/templates/default/images/tbl_sort_asc.gif -8e4e5cd8411fdbc13063559c806e4ee2 styles/templates/default/images/tbl_sort_bg.gif -c0bc5d685abe4665cac87bbf4ae3baaa styles/templates/default/images/tbl_sort_desc.gif -68a2e3b316a78d60bded74754ba8b363 styles/templates/default/images/topic_delete.gif -a6e22cbd4d56be5363b789e73cc35f58 styles/templates/default/images/topic_dl.gif -d08375996ca1a8cf525a9b9bb2e2cab9 styles/templates/default/images/topic_lock.gif -7e6d917129a775317bda2e520cc6f776 styles/templates/default/images/topic_move.gif -c24c15c3b825897cf7c49be7c4acb906 styles/templates/default/images/topic_normal.gif -eb97843675c5320b3447589ed5e31da3 styles/templates/default/images/topic_split.gif -3d51de46cd52b23b15e0c4327e965b7e styles/templates/default/images/topic_unlock.gif -b2a154cf4440b6fb0ff02dae656d37ea styles/templates/default/images/vote_lcap.gif -1e9ade5d42b0fa55ea3b384443d4fb60 styles/templates/default/images/vote_rcap.gif -aaae4097cd78f14b2e565954523737da styles/templates/default/images/voting_bar.gif -b5b72fb13a489c892a1fc60b4cd1561b styles/templates/default/images/whosonline.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/af/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/af/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/af/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/af/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/af/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/af/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/af/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/af/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/af/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/af/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/af/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/af/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/af/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/af/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/af/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/af/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/af/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/ar/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/ar/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/ar/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/ar/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/ar/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/ar/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/ar/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/ar/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/ar/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/ar/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/ar/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/ar/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/ar/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/ar/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/ar/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/ar/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/ar/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/az/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/az/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/az/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/az/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/az/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/az/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/az/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/az/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/az/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/az/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/az/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/az/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/az/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/az/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/az/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/az/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/az/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/be/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/be/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/be/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/be/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/be/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/be/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/be/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/be/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/be/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/be/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/be/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/be/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/be/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/be/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/be/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/be/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/be/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/bg/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/bg/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/bg/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/bg/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/bg/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/bg/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/bg/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/bg/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/bg/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/bg/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/bg/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/bg/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/bg/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/bg/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/bg/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/bg/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/bg/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/bs/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/bs/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/bs/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/bs/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/bs/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/bs/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/bs/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/bs/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/bs/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/bs/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/bs/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/bs/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/bs/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/bs/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/bs/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/bs/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/bs/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/ca/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/ca/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/ca/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/ca/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/ca/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/ca/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/ca/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/ca/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/ca/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/ca/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/ca/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/ca/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/ca/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/ca/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/ca/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/ca/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/ca/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/cs/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/cs/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/cs/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/cs/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/cs/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/cs/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/cs/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/cs/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/cs/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/cs/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/cs/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/cs/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/cs/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/cs/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/cs/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/cs/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/cs/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/da/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/da/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/da/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/da/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/da/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/da/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/da/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/da/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/da/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/da/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/da/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/da/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/da/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/da/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/da/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/da/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/da/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/de/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/de/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/de/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/de/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/de/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/de/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/de/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/de/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/de/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/de/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/de/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/de/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/de/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/de/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/de/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/de/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/de/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/el/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/el/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/el/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/el/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/el/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/el/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/el/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/el/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/el/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/el/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/el/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/el/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/el/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/el/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/el/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/el/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/el/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/en/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/en/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/en/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/en/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/en/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/en/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/en/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/en/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/en/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/en/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/en/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/en/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/en/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/en/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/en/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/en/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/en/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/es/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/es/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/es/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/es/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/es/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/es/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/es/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/es/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/es/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/es/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/es/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/es/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/es/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/es/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/es/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/es/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/es/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/et/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/et/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/et/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/et/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/et/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/et/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/et/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/et/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/et/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/et/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/et/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/et/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/et/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/et/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/et/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/et/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/et/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/fi/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/fi/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/fi/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/fi/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/fi/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/fi/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/fi/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/fi/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/fi/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/fi/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/fi/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/fi/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/fi/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/fi/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/fi/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/fi/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/fi/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/fr/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/fr/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/fr/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/fr/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/fr/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/fr/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/fr/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/fr/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/fr/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/fr/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/fr/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/fr/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/fr/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/fr/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/fr/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/fr/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/fr/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/he/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/he/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/he/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/he/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/he/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/he/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/he/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/he/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/he/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/he/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/he/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/he/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/he/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/he/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/he/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/he/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/he/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/hi/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/hi/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/hi/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/hi/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/hi/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/hi/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/hi/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/hi/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/hi/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/hi/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/hi/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/hi/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/hi/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/hi/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/hi/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/hi/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/hi/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/hr/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/hr/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/hr/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/hr/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/hr/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/hr/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/hr/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/hr/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/hr/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/hr/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/hr/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/hr/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/hr/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/hr/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/hr/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/hr/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/hr/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/hu/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/hu/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/hu/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/hu/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/hu/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/hu/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/hu/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/hu/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/hu/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/hu/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/hu/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/hu/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/hu/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/hu/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/hu/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/hu/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/hu/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/hy/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/hy/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/hy/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/hy/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/hy/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/hy/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/hy/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/hy/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/hy/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/hy/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/hy/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/hy/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/hy/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/hy/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/hy/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/hy/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/hy/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/id/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/id/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/id/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/id/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/id/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/id/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/id/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/id/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/id/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/id/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/id/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/id/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/id/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/id/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/id/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/id/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/id/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/it/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/it/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/it/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/it/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/it/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/it/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/it/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/it/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/it/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/it/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/it/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/it/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/it/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/it/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/it/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/it/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/it/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/ja/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/ja/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/ja/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/ja/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/ja/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/ja/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/ja/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/ja/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/ja/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/ja/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/ja/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/ja/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/ja/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/ja/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/ja/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/ja/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/ja/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/ka/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/ka/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/ka/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/ka/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/ka/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/ka/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/ka/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/ka/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/ka/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/ka/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/ka/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/ka/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/ka/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/ka/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/ka/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/ka/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/ka/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/kk/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/kk/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/kk/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/kk/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/kk/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/kk/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/kk/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/kk/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/kk/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/kk/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/kk/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/kk/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/kk/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/kk/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/kk/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/kk/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/kk/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/ko/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/ko/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/ko/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/ko/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/ko/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/ko/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/ko/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/ko/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/ko/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/ko/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/ko/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/ko/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/ko/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/ko/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/ko/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/ko/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/ko/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/lt/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/lt/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/lt/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/lt/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/lt/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/lt/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/lt/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/lt/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/lt/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/lt/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/lt/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/lt/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/lt/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/lt/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/lt/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/lt/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/lt/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/lv/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/lv/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/lv/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/lv/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/lv/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/lv/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/lv/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/lv/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/lv/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/lv/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/lv/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/lv/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/lv/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/lv/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/lv/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/lv/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/lv/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/nl/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/nl/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/nl/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/nl/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/nl/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/nl/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/nl/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/nl/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/nl/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/nl/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/nl/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/nl/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/nl/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/nl/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/nl/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/nl/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/nl/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/no/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/no/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/no/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/no/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/no/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/no/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/no/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/no/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/no/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/no/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/no/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/no/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/no/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/no/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/no/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/no/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/no/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/pl/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/pl/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/pl/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/pl/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/pl/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/pl/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/pl/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/pl/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/pl/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/pl/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/pl/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/pl/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/pl/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/pl/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/pl/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/pl/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/pl/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/pt/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/pt/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/pt/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/pt/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/pt/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/pt/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/pt/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/pt/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/pt/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/pt/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/pt/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/pt/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/pt/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/pt/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/pt/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/pt/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/pt/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/ro/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/ro/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/ro/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/ro/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/ro/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/ro/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/ro/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/ro/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/ro/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/ro/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/ro/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/ro/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/ro/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/ro/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/ro/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/ro/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/ro/reply.gif -d89da645f25b776efdcf90fca65193ed styles/templates/default/images/lang/ru/icon_code.gif -064575b4996a95fc977b69562c41dc0f styles/templates/default/images/lang/ru/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/ru/icon_email.gif -2cfdd6c396477ba575fbfa7fef6223de styles/templates/default/images/lang/ru/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/ru/icon_ip.gif -2ae0c64895c4717fd08ad0655458c112 styles/templates/default/images/lang/ru/icon_mc.gif -0cfc0b6a7f83bcf1c6abc9d9e43ebac4 styles/templates/default/images/lang/ru/icon_pm.gif -3d9a2ba643b90996e9b90aeeae137fad styles/templates/default/images/lang/ru/icon_poll.gif -14cc62ae6dc776446d9100c5571e1633 styles/templates/default/images/lang/ru/icon_profile.gif -6743bc7fe6e2c7ea210ca8acc3512178 styles/templates/default/images/lang/ru/icon_quote.gif -fa6e0200e079d85fbe72199dbebf33e9 styles/templates/default/images/lang/ru/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/ru/icon_www.gif -045df1ffa720c2ce4d9d989cef4ac3de styles/templates/default/images/lang/ru/msg_newpost.gif -828acacecedc6a991ace8fb9ce315373 styles/templates/default/images/lang/ru/post.gif -d4b1060096f2d3220be431b544efff2c styles/templates/default/images/lang/ru/release.gif -406f9c40018c5c7b7a75e68a3aefbf51 styles/templates/default/images/lang/ru/reply-locked.gif -733bc771759c92fb820c7da9b2d5d9c0 styles/templates/default/images/lang/ru/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/sk/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/sk/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/sk/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/sk/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/sk/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/sk/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/sk/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/sk/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/sk/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/sk/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/sk/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/sk/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/sk/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/sk/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/sk/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/sk/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/sk/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/sl/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/sl/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/sl/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/sl/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/sl/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/sl/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/sl/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/sl/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/sl/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/sl/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/sl/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/sl/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/sl/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/sl/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/sl/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/sl/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/sl/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/source/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/source/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/source/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/source/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/source/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/source/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/source/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/source/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/source/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/source/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/source/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/source/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/source/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/source/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/source/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/source/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/source/reply.gif -baa89473fcb9b952a80053b6eb321f33 styles/templates/default/images/lang/source/icons_sources/icon_large.gif -978e5cf6605efcd4a98cfe266c608d65 styles/templates/default/images/lang/source/icons_sources/icon_medium.gif -d23772c03e0713a567aa244a355289dd styles/templates/default/images/lang/source/icons_sources/icon_small.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/sq/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/sq/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/sq/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/sq/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/sq/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/sq/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/sq/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/sq/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/sq/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/sq/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/sq/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/sq/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/sq/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/sq/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/sq/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/sq/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/sq/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/sr/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/sr/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/sr/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/sr/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/sr/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/sr/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/sr/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/sr/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/sr/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/sr/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/sr/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/sr/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/sr/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/sr/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/sr/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/sr/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/sr/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/sv/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/sv/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/sv/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/sv/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/sv/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/sv/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/sv/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/sv/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/sv/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/sv/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/sv/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/sv/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/sv/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/sv/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/sv/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/sv/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/sv/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/tg/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/tg/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/tg/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/tg/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/tg/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/tg/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/tg/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/tg/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/tg/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/tg/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/tg/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/tg/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/tg/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/tg/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/tg/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/tg/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/tg/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/th/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/th/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/th/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/th/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/th/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/th/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/th/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/th/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/th/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/th/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/th/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/th/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/th/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/th/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/th/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/th/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/th/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/tr/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/tr/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/tr/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/tr/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/tr/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/tr/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/tr/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/tr/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/tr/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/tr/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/tr/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/tr/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/tr/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/tr/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/tr/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/tr/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/tr/reply.gif -d89da645f25b776efdcf90fca65193ed styles/templates/default/images/lang/uk/icon_code.gif -df03a11c18f3d49224b3d0fd74bc5804 styles/templates/default/images/lang/uk/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/uk/icon_email.gif -2cfdd6c396477ba575fbfa7fef6223de styles/templates/default/images/lang/uk/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/uk/icon_ip.gif -2ae0c64895c4717fd08ad0655458c112 styles/templates/default/images/lang/uk/icon_mc.gif -e870da821d4e86bb953a3056f860b58b styles/templates/default/images/lang/uk/icon_pm.gif -3f859473a91ae3b639b54786af6c3f90 styles/templates/default/images/lang/uk/icon_poll.gif -849cd99f4440f9dfefae0a9824ea799d styles/templates/default/images/lang/uk/icon_profile.gif -4485756741b9f3a5c72328a6daea8d83 styles/templates/default/images/lang/uk/icon_quote.gif -a04467bcc44b77ec15d46e1f365f62a1 styles/templates/default/images/lang/uk/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/uk/icon_www.gif -76a98f09ed54adac0766bbb76d2169a7 styles/templates/default/images/lang/uk/msg_newpost.gif -1baeb6a57afebf337ff78f6d9cfeccc6 styles/templates/default/images/lang/uk/post.gif -57051003eaa18a8f1c944f7304ae4851 styles/templates/default/images/lang/uk/release.gif -b67abbda2faafa31455ff833fb8a7ad7 styles/templates/default/images/lang/uk/reply-locked.gif -19b778ee051d88d4832aa4c537720127 styles/templates/default/images/lang/uk/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/uz/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/uz/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/uz/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/uz/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/uz/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/uz/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/uz/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/uz/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/uz/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/uz/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/uz/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/uz/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/uz/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/uz/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/uz/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/uz/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/uz/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/vi/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/vi/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/vi/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/vi/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/vi/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/vi/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/vi/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/vi/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/vi/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/vi/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/vi/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/vi/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/vi/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/vi/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/vi/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/vi/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/vi/reply.gif -bc5e62fc86261beddba8148159387c68 styles/templates/default/images/lang/zh/icon_code.gif -5aa9e64c0c7cfe3b4c32eff398812b11 styles/templates/default/images/lang/zh/icon_edit.gif -856efdf70ef6ac14578e13fc5dab0d19 styles/templates/default/images/lang/zh/icon_email.gif -0681fd34899481e0341e56424a1f570f styles/templates/default/images/lang/zh/icon_icq_add.gif -dac3982c2fd0aab820856673a2006305 styles/templates/default/images/lang/zh/icon_ip.gif -666246ae333d17d556959a6246320971 styles/templates/default/images/lang/zh/icon_mc.gif -2d3b81b0306f2a342f3f423e94f9dadb styles/templates/default/images/lang/zh/icon_pm.gif -f58178686ee05e642c9f1016a0d3c744 styles/templates/default/images/lang/zh/icon_poll.gif -f7967a26675134fddaac940fdc149284 styles/templates/default/images/lang/zh/icon_profile.gif -9994ee815bcaff45cf7fefb5431c7b5e styles/templates/default/images/lang/zh/icon_quote.gif -ff35af34305d9f672423fc99fdca5cb9 styles/templates/default/images/lang/zh/icon_search.gif -17c0c3157010be8f91b63efffe67c9af styles/templates/default/images/lang/zh/icon_www.gif -b1ab4e6e746eb20926803c098c55ae62 styles/templates/default/images/lang/zh/msg_newpost.gif -f85ca4309e6073a45da5a0d429cf5d77 styles/templates/default/images/lang/zh/post.gif -83add0d310fc6460718fd715e9b1b8fa styles/templates/default/images/lang/zh/release.gif -2bf138f4abee5cd73b403678c2cf5ef3 styles/templates/default/images/lang/zh/reply-locked.gif -dc9759bace55a4d0f6ac6f4990833c81 styles/templates/default/images/lang/zh/reply.gif -5e3c0e0c48f48c23c45aef7b72c739c0 styles/templates/default/images/treeview/treeview-default-line.gif -46878a9b3ede269c4e234550c9c89cd0 styles/templates/default/images/treeview/treeview-default.gif diff --git a/internal_data/log/.htaccess b/internal_data/log/.htaccess deleted file mode 100644 index b66e80882..000000000 --- a/internal_data/log/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Require all denied diff --git a/internal_data/log/.keep b/internal_data/log/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/internal_data/triggers/.htaccess b/internal_data/triggers/.htaccess deleted file mode 100644 index b66e80882..000000000 --- a/internal_data/triggers/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Require all denied diff --git a/library/ajax/manage_admin.php b/library/ajax/manage_admin.php index 097124ccb..cb0249239 100644 --- a/library/ajax/manage_admin.php +++ b/library/ajax/manage_admin.php @@ -82,10 +82,6 @@ switch ($mode) { \TorrentPier\Helpers\CronHelper::enableBoard(); $this->response['unlock_cron_html'] = '' . $lang['ADMIN_UNLOCKED'] . ''; break; - case 'restore_corrupt_files': - file_write('', RESTORE_CORRUPT_CONFIRM_FILE, replace_content: true); - $this->response['restore_corrupt_files_html'] = '' . $lang['INTEGRITY_RESTORE_CONFIRM_OK'] . ''; - break; default: $this->ajax_die('Invalid mode: ' . $mode); } diff --git a/library/ajax/view_post.php b/library/ajax/view_post.php index 51929cc4f..916ce6cb6 100644 --- a/library/ajax/view_post.php +++ b/library/ajax/view_post.php @@ -15,7 +15,7 @@ global $user, $lang, $bb_cfg; $post_id = isset($this->request['post_id']) ? (int)$this->request['post_id'] : null; $topic_id = isset($this->request['topic_id']) ? (int)$this->request['topic_id'] : null; -$return_text = $bb_cfg['show_post_bbcode_button'] && isset($this->request['return_text']) && (bool)$this->request['return_text']; +$return_text = $bb_cfg['show_post_bbcode_button']['enabled'] && isset($this->request['return_text']) && (bool)$this->request['return_text']; if (is_null($post_id)) { $post_id = DB()->fetch_row("SELECT topic_first_post_id FROM " . BB_TOPICS . " WHERE topic_id = $topic_id", 'topic_first_post_id'); diff --git a/library/attach_mod/.htaccess b/library/attach_mod/.htaccess deleted file mode 100644 index b66e80882..000000000 --- a/library/attach_mod/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Require all denied diff --git a/library/attach_mod/displaying_torrent.php b/library/attach_mod/displaying_torrent.php index 604c5bf2e..a4364d750 100644 --- a/library/attach_mod/displaying_torrent.php +++ b/library/attach_mod/displaying_torrent.php @@ -79,7 +79,7 @@ $tor_auth_del = ($tor_auth && $tor_reged); $tracker_link = ($tor_reged) ? $lang['BT_REG_YES'] : $lang['BT_REG_NO']; $download_link = DL_URL . $attach_id; -$description = ($comment) ?: preg_replace("#.torrent$#i", '', $display_name); +$description = ($comment) ?: preg_replace("#" . "." . TORRENT_EXT . "$#i", '', $display_name); if ($tor_auth_reg || $tor_auth_del) { $reg_tor_url = '' . $lang['BT_REG_ON_TRACKER'] . ''; @@ -88,7 +88,11 @@ if ($tor_auth_reg || $tor_auth_del) { $tracker_link = ($tor_reged) ? $unreg_tor_url : $reg_tor_url; } -$display_name = $t_data['topic_title'] . ' [' . $bb_cfg['server_name'] . '-' . $bt_topic_id . ']' . '.' . TORRENT_EXT; +if ($bb_cfg['tracker']['use_old_torrent_name_format']) { + $display_name = '[' . $bb_cfg['server_name'] . '].t' . $bt_topic_id . '.' . TORRENT_EXT; +} else { + $display_name = $t_data['topic_title'] . ' [' . $bb_cfg['server_name'] . '-' . $bt_topic_id . ']' . '.' . TORRENT_EXT; +} if (!$tor_reged) { $template->assign_block_vars('postrow.attach.tor_not_reged', [ @@ -145,7 +149,7 @@ if ($tor_reged && $tor_info) { // Magnet link $user_passkey = \TorrentPier\Legacy\Torrent::getPasskey($bt_user_id); - $tor_magnet = create_magnet($tor_info['info_hash'], $tor_info['info_hash_v2'], $user_passkey, html_ent_decode($t_data['topic_title'])); + $tor_magnet = create_magnet($tor_info['info_hash'], $tor_info['info_hash_v2'], $user_passkey, html_ent_decode($t_data['topic_title']), $tor_size); // ratio limits $min_ratio_dl = $bb_cfg['bt_min_ratio_allow_dl_tor']; @@ -215,7 +219,6 @@ if ($tor_reged && $tor_info) { 'HASH' => !empty($tor_info['info_hash']) ? strtoupper(bin2hex($tor_info['info_hash'])) : false, 'HASH_V2' => !empty($tor_info['info_hash_v2']) ? strtoupper(bin2hex($tor_info['info_hash_v2'])) : false, 'FILELIST_ICON' => $images['icon_tor_filelist'], - 'FILELIST_LINK' => FILELIST_URL . $tor_info['topic_id'], 'REGED_TIME' => bb_date($tor_info['reg_time']), 'REGED_DELTA' => delta_time($tor_info['reg_time']), 'TORRENT_SIZE' => humn_size($tor_size, 2), @@ -241,7 +244,7 @@ if ($tor_reged && $tor_info) { 'SHOW_DL_LIST' => true, 'SHOW_DL_LIST_TOR_INFO' => true, - 'TOR_SIZE' => humn_size($tor_size, 1), + 'TOR_SIZE' => humn_size($tor_size, 2), 'TOR_LONGEVITY' => delta_time($tor_info['reg_time']), 'TOR_DOWNLOAD_COUNT' => $download_count, 'TOR_COMPLETED' => $tor_completed_count, @@ -298,7 +301,7 @@ if ($tor_reged && $tor_info) { $sql = "SELECT tr.user_id, tr.ip, tr.ipv6, tr.port, tr.peer_id, tr.uploaded, tr.downloaded, tr.remain, tr.seeder, tr.releaser, tr.speed_up, tr.speed_down, tr.update_time, - tr.complete_percent, u.username, u.user_rank + tr.complete_percent, u.username, u.user_rank, u.user_opt FROM " . BB_BT_TRACKER . " tr LEFT JOIN " . BB_USERS . " u ON u.user_id = tr.user_id WHERE tr.topic_id = $tor_id @@ -369,8 +372,8 @@ if ($tor_reged && $tor_info) { $peers = $tmp; $template->assign_vars([ - 'TOR_SPEED_UP' => ($tor_speed_up) ? humn_size($tor_speed_up, 0, 'KB') . '/s' : '0 KB/s', - 'TOR_SPEED_DOWN' => ($tor_speed_down) ? humn_size($tor_speed_down, 0, 'KB') . '/s' : '0 KB/s' + 'TOR_SPEED_UP' => ($tor_speed_up) ? humn_size($tor_speed_up, min: 'KB') . '/s' : '0 KB/s', + 'TOR_SPEED_DOWN' => ($tor_speed_down) ? humn_size($tor_speed_down, min: 'KB') . '/s' : '0 KB/s' ]); } @@ -403,7 +406,7 @@ if ($tor_reged && $tor_info) { $template->assign_block_vars((string)$x_full, [ 'SEED_ORD_ACT' => $seed_order_action, - 'SEEDERS_UP_TOT' => humn_size($sp_up_tot[$x], 0, 'KB') . '/s' + 'SEEDERS_UP_TOT' => humn_size($sp_up_tot[$x], min: 'KB') . '/s' ]); if ($ip) { @@ -425,8 +428,8 @@ if ($tor_reged && $tor_info) { $template->assign_block_vars((string)$x_full, [ 'LEECH_ORD_ACT' => $leech_order_action, - 'LEECHERS_UP_TOT' => humn_size($sp_up_tot[$x], 0, 'KB') . '/s', - 'LEECHERS_DOWN_TOT' => humn_size($sp_down_tot[$x], 0, 'KB') . '/s' + 'LEECHERS_UP_TOT' => humn_size($sp_up_tot[$x], min: 'KB') . '/s', + 'LEECHERS_DOWN_TOT' => humn_size($sp_down_tot[$x], min: 'KB') . '/s' ]); if ($ip) { @@ -445,18 +448,36 @@ if ($tor_reged && $tor_info) { $up_tot = ($p_max_up) ? humn_size($p_max_up) : '-'; $down_tot = ($p_max_down) ? humn_size($p_max_down) : '-'; $up_ratio = ($p_max_down) ? round(($p_max_up / $p_max_down), 2) : ''; - $sp_up = ($peer['speed_up']) ? humn_size($peer['speed_up'], 0, 'KB') . '/s' : '-'; - $sp_down = ($peer['speed_down']) ? humn_size($peer['speed_down'], 0, 'KB') . '/s' : '-'; + $sp_up = ($peer['speed_up']) ? humn_size($peer['speed_up'], min: 'KB') . '/s' : '-'; + $sp_down = ($peer['speed_down']) ? humn_size($peer['speed_down'], min: 'KB') . '/s' : '-'; $bgr_class = (!($tr[$x] % 2)) ? $bgr_class_1 : $bgr_class_2; $row_bgr = ($change_peers_bgr_over) ? " class=\"$bgr_class\" onmouseover=\"this.className='$bgr_class_over';\" onmouseout=\"this.className='$bgr_class';\"" : ''; $tr[$x]++; + $peerTorrentClient = $lang['UNKNOWN']; + if (IS_AM || $peer['user_id'] == $userdata['user_id'] || !bf($peer['user_opt'], 'user_opt', 'user_hide_torrent_client')) { + if (isset($peer['peer_id'])) { + $peerTorrentClient = get_user_torrent_client($peer['peer_id']); + } + } + + $peerCountry = $lang['UNKNOWN']; + if ($bb_cfg['ip2country_settings']['enabled']) { + if (IS_AM || $peer['user_id'] == $userdata['user_id'] || !bf($peer['user_opt'], 'user_opt', 'user_hide_peer_country')) { + if ($infoByIP = infoByIP((!empty($peer['ipv6']) ? $peer['ipv6'] : $peer['ip']), $peer['port'])) { + if (!empty($infoByIP['countryCode'])) { + $peerCountry = render_flag($infoByIP['countryCode'], false); + } + } + } + } + $template->assign_block_vars("$x_full.$x_row", [ 'ROW_BGR' => $row_bgr, 'NAME' => ($peer['update_time']) ? $name : "$name", - 'PEER_ID' => isset($peer['peer_id']) ? get_user_torrent_client($peer['peer_id']) : $lang['UNKNOWN'], - 'COUNTRY' => render_flag(infoByIP((!empty($peer['ipv6']) ? $peer['ipv6'] : $peer['ip']), $peer['port'])['countryCode'], false), + 'PEER_ID' => $peerTorrentClient, + 'COUNTRY' => $peerCountry, 'COMPL_PRC' => $compl_perc, 'UP_TOTAL' => ($max_up_id[$x] == $pid) ? "$up_tot" : $up_tot, 'DOWN_TOTAL' => ($max_down_id[$x] == $pid) ? "$down_tot" : $down_tot, diff --git a/library/attach_mod/includes/functions_attach.php b/library/attach_mod/includes/functions_attach.php index ebfc48bcb..e2d7bc67a 100644 --- a/library/attach_mod/includes/functions_attach.php +++ b/library/attach_mod/includes/functions_attach.php @@ -342,7 +342,7 @@ function _set_var(&$result, $var, $type, $multibyte = false) * @param $var_name * @param $default * @param bool $multibyte - * @return array + * @return array|string */ function get_var($var_name, $default, $multibyte = false) { diff --git a/library/config.php b/library/config.php index 0390e3905..55de1ba8d 100644 --- a/library/config.php +++ b/library/config.php @@ -12,14 +12,14 @@ if (!defined('BB_ROOT')) { } // Server settings -$reserved_name = 'example.com'; -$reserved_port = 80; +$reserved_name = env('TP_HOST', 'example.com'); +$reserved_port = env('TP_PORT', 80); $bb_cfg = []; // Version info -$bb_cfg['tp_version'] = 'v2.4.5'; -$bb_cfg['tp_release_date'] = 'XX-XX-2025'; +$bb_cfg['tp_version'] = 'v2.4.5-rc.5'; +$bb_cfg['tp_release_date'] = '03-05-2025'; $bb_cfg['tp_release_codename'] = 'Cattle'; // Increase version number after changing JS or CSS @@ -144,10 +144,12 @@ $bb_cfg['torr_server'] = [ 'disable_for_guest' => true ]; -// IndexNow settings -$bb_cfg['indexnow_settings'] = [ - 'enabled' => false, - 'host' => 'bing', // Available: yandex, bing, seznam, naver +// FreeIPAPI settings +$bb_cfg['ip2country_settings'] = [ + // Documentation: https://docs.freeipapi.com/ + 'enabled' => true, + 'endpoint' => 'https://freeipapi.com/api/json/', + 'api_token' => '', // not required for basic usage ]; // FAQ url help link @@ -193,6 +195,7 @@ $bb_cfg['posting_url'] = 'posting.php'; # "http://{$domain_name}/posting.php" $bb_cfg['pm_url'] = 'privmsg.php'; # "http://{$domain_name}/privmsg.php" // Language +$bb_cfg['auto_language_detection'] = true; // Use browser language (auto-detect) as default language for guests $bb_cfg['lang'] = [ // Languages available for selecting 'af' => [ @@ -425,7 +428,7 @@ $bb_cfg['invites_system'] = [ // Syntax: 'invite_code' => 'validity_period' // The 'validity_period' value is based on strtotime() function: https://www.php.net/manual/en/function.strtotime.php // You can also create a permanent invite, set 'permanent' value for 'validity_period' - // Invite link example: site_url/profile.php?mode=register&invite=new_year + // Invite link example: site_url/profile.php?mode=register&invite=new_year2023 'new_year2023' => '2022-12-31 00:00:01', '340c4bb6ea2d284c13e085b60b990a8a' => '12 April 1961', 'tp_birthday' => '2005-04-04', @@ -434,22 +437,23 @@ $bb_cfg['invites_system'] = [ ]; $bb_cfg['password_symbols'] = [ // What symbols should be required in the password - 'nums' => true, // Numeric - 'spec_symbols' => false, // Special symbols - 'letters' => [ // Letters - 'uppercase' => true, // Uppercase letters - 'lowercase' => true // Lowercase letters + 'nums' => true, + 'spec_symbols' => false, + 'letters' => [ + 'uppercase' => false, + 'lowercase' => true ] ]; $bb_cfg['password_hash_options'] = [ // https://www.php.net/manual/ru/password.constants.php 'algo' => PASSWORD_BCRYPT, - 'options' => [] + 'options' => ['cost' => 12] ]; // Email $bb_cfg['emailer'] = [ 'enabled' => true, + 'sendmail_command' => '/usr/sbin/sendmail -bs', 'smtp' => [ 'enabled' => false, // send email via external SMTP server 'host' => 'localhost', // SMTP server host @@ -521,7 +525,10 @@ $bb_cfg['sf_on_first_page_only'] = true; // Show subforums only on the first pag $bb_cfg['allowed_topics_per_page'] = [50, 100, 150, 200, 250, 300]; // Allowed number of topics per page // Topics -$bb_cfg['show_post_bbcode_button'] = true; // Show "Code" button in topic to display BBCode of topic +$bb_cfg['show_post_bbcode_button'] = [ // Show "Code" button in topic to display BBCode of topic + 'enabled' => true, + 'only_for_first_post' => true, +]; $bb_cfg['show_quick_reply'] = true; // Show quick reply forim $bb_cfg['show_rank_text'] = false; // Show user rank name in topics $bb_cfg['show_rank_image'] = true; // Show user rank image in topics @@ -602,7 +609,6 @@ $bb_cfg['flist_max_files'] = 0; // Max allowed number of files to process for gi $bb_cfg['last_visit_date_format'] = 'd-M H:i'; $bb_cfg['last_post_date_format'] = 'd-M-y H:i'; $bb_cfg['poll_max_days'] = 180; // How many days will the poll be active -$bb_cfg['integrity_check'] = true; // TorrentPier files integrity check $bb_cfg['allow_change'] = [ 'language' => true, // Allow user to change language @@ -670,12 +676,12 @@ $bb_cfg['group_avatars'] = [ ]; // Captcha -// Get a Google reCAPTCHA API Key: https://www.google.com/recaptcha/admin $bb_cfg['captcha'] = [ 'disabled' => true, + 'service' => 'googleV3', // Available services: text, googleV2, googleV3, hCaptcha, yandex, cloudflare 'public_key' => '', 'secret_key' => '', - 'theme' => 'light', // theming (available: light, dark) + 'theme' => 'light', // theming (available: light, dark) (working only if supported by captcha service) ]; // Atom feed @@ -736,7 +742,8 @@ $bb_cfg['tracker'] = [ 'gold_silver_enabled' => true, // golden / silver days mode (If enabled, then disable "freeleech") 'hybrid_stat_protocol' => 1, // For hybrid torrents there are two identical requests sent by clients, for counting stats we gotta choose one, you can change this to '2' in future, when v1 protocol is outdated 'disabled_v1_torrents' => false, // disallow registration of v1-only torrents, for future implementations where client will use v2 only and there won't be need for v1, thus relieving tracker - 'disabled_v2_torrents' => false // disallow registration of v2-only torrents + 'disabled_v2_torrents' => false, // disallow registration of v2-only torrents + 'use_old_torrent_name_format' => false, // when enabled, the names of torrent files will have the classic format: [yoursite.com].txxx.torrent ]; // Ratio settings diff --git a/library/defines.php b/library/defines.php index 36dfec0fb..30d3d3ab2 100644 --- a/library/defines.php +++ b/library/defines.php @@ -33,13 +33,8 @@ define('APP_NAME', 'TorrentPier'); define('DEFAULT_CHARSET', 'UTF-8'); define('UPDATER_URL', 'https://api.github.com/repos/torrentpier/torrentpier/releases'); define('UPDATER_FILE', INT_DATA_DIR . '/updater.json'); -define('CHECKSUMS_FILE', INT_DATA_DIR . '/checksums.md5'); -define('RESTORE_CORRUPT_CONFIRM_FILE', INT_DATA_DIR . '/rescorrupt.integrity'); define('COOKIE_DBG', 'bb_dbg'); -// TODO: Move in another section -define('API_IP_URL', 'https://freeipapi.com/api/json/'); - // Templates define('ADMIN_TPL_DIR', TEMPLATES_DIR . '/admin/'); define('XS_USE_ISSET', '1'); diff --git a/library/includes/.htaccess b/library/includes/.htaccess deleted file mode 100644 index b66e80882..000000000 --- a/library/includes/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Require all denied diff --git a/library/includes/bbcode.php b/library/includes/bbcode.php index 29ea40982..9e34d8940 100644 --- a/library/includes/bbcode.php +++ b/library/includes/bbcode.php @@ -118,7 +118,7 @@ function generate_smilies($mode) $data = $datastore->get('smile_replacements'); - if ($sql = $data['smile']) { + if (isset($data['smile']) && $sql = $data['smile']) { $num_smilies = 0; $rowset = []; foreach ($sql as $row) { diff --git a/library/includes/cron/jobs/board_maintenance.php b/library/includes/cron/jobs/board_maintenance.php index 3662e65ca..de789f9f8 100644 --- a/library/includes/cron/jobs/board_maintenance.php +++ b/library/includes/cron/jobs/board_maintenance.php @@ -54,27 +54,10 @@ if (empty($bb_cfg['bt_announce_url']) || ($bb_cfg['bt_announce_url'] === 'https: bb_update_config(['bt_announce_url' => FULL_URL . 'bt/announce.php']); } -// [Demo mode] Allow registering torrents by default +// [Demo mode] Allow registering torrents by default for "Your first forum" if (IN_DEMO_MODE) { - DB()->query("UPDATE " . BB_FORUMS . " SET allow_reg_tracker = 1 WHERE allow_reg_tracker = 0"); -} - -// Create unique TorrentPier instance hash -if (empty($bb_cfg['tp_instance_hash']) || ($bb_cfg['tp_instance_hash'] !== hash('xxh128', FULL_URL))) { - bb_update_config(['tp_instance_hash' => hash('xxh128', FULL_URL)]); -} - -// Generate IndexNow key -if ($bb_cfg['indexnow_settings']['enabled'] && !is_file(BB_ROOT . $bb_cfg['indexnow_key'] . \TorrentPier\IndexNow::$keyFileExtension)) { - $randomIndexNowKey = empty($bb_cfg['indexnow_key']) ? make_rand_str(rand(64, 128)) : $bb_cfg['indexnow_key']; - if ($bb_cfg['indexnow_key'] !== $randomIndexNowKey) { - bb_update_config(['indexnow_key' => $randomIndexNowKey]); - } - file_write($randomIndexNowKey, (BB_ROOT . $randomIndexNowKey . \TorrentPier\IndexNow::$keyFileExtension)); + DB()->query("UPDATE " . BB_FORUMS . " SET allow_reg_tracker = 1 WHERE allow_reg_tracker = 0 AND forum_id = 1 LIMIT 1"); } // Check for updates $datastore->update('check_updates'); - -// Integrity check -$datastore->update('files_integrity'); diff --git a/library/includes/cron/jobs/tr_seed_bonus.php b/library/includes/cron/jobs/tr_seed_bonus.php index b8fc3f6d4..83e817ea9 100644 --- a/library/includes/cron/jobs/tr_seed_bonus.php +++ b/library/includes/cron/jobs/tr_seed_bonus.php @@ -29,25 +29,18 @@ if ($bb_cfg['seed_bonus_enabled'] && $bb_cfg['seed_bonus_points'] && $bb_cfg['se WHERE tor.topic_id = bt.topic_id AND tor.size > $tor_size AND bt.seeder > 0 - GROUP BY user_id + GROUP BY bt.user_id "); $seed_bonus = unserialize($bb_cfg['seed_bonus_points']); $seed_release = unserialize($bb_cfg['seed_bonus_release']); - $sql = "SELECT last_run - FROM " . BB_CRON . " - WHERE cron_script = '" . basename(__FILE__) . "' - LIMIT 1"; - $cron_runs = DB()->fetch_row($sql); - $cron_job_last_run = (TIMENOW - strtotime($cron_runs['last_run'])); - foreach ($seed_bonus as $i => $points) { if (!$points || !$seed_release[$i]) { continue; } - $user_points = ($cron_job_last_run < 3600) ? round((float)$points * ($cron_job_last_run / 3600), 2) : 0; + $user_points = ((float)$points / 4); $release = (int)$seed_release[$i]; $user_regdate = (TIMENOW - $bb_cfg['seed_bonus_user_regdate'] * 86400); diff --git a/library/includes/datastore/build_files_integrity.php b/library/includes/datastore/build_files_integrity.php deleted file mode 100644 index b8e5bd36a..000000000 --- a/library/includes/datastore/build_files_integrity.php +++ /dev/null @@ -1,95 +0,0 @@ -setFlags(SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE); - -$ignoreFiles = [ - '.env.example', - '.htaccess', - 'robots.txt', - 'install.php', - 'favicon.png', - 'composer.json', - 'composer.lock', - hide_bb_path(CHECKSUMS_FILE), - hide_bb_path(BB_ENABLED), - 'library/config.php', - 'library/defines.php', - 'styles/images/logo/logo.png' -]; - -foreach ($checksumFile as $line) { - $parts = explode(' ', $line); - if (!isset($parts[0]) || !isset($parts[1])) { - // Skip end line - break; - } - if (!empty($ignoreFiles) && in_array($parts[1], $ignoreFiles)) { - // Skip files from "Ignoring list" - continue; - } - $filesList[] = [ - 'path' => trim($parts[1]), - 'hash' => trim($parts[0]) - ]; -} - -foreach ($filesList as $file) { - if (!file_exists(BB_ROOT . $file['path']) || (strtolower(md5_file(BB_ROOT . $file['path'])) !== strtolower($file['hash']))) { - $wrongFilesList[] = $file['path']; - } -} - -// Restore corrupt files -if (is_file(RESTORE_CORRUPT_CONFIRM_FILE)) { - $buildDownloader = new \TorrentPier\Updater(); - if ($buildDownloader->download(INT_DATA_DIR . '/', $bb_cfg['tp_version'])) { - // Unzip downloaded build file - $zipArchive = new ZipArchive; - $extractDownloadedFile = $zipArchive->open($buildDownloader->savePath); - if ($extractDownloadedFile === true) { - if ($zipArchive->extractTo(BB_ROOT, $wrongFilesList)) { - $wrongFilesList = []; - } - $zipArchive->close(); - } - } - - // Delete restore confirm file & build file - if (isset($buildDownloader->savePath)) { - unlink($buildDownloader->savePath); - } - if (is_file(RESTORE_CORRUPT_CONFIRM_FILE)) { - unlink(RESTORE_CORRUPT_CONFIRM_FILE); - } -} - -$data = [ - 'success' => empty($wrongFilesList), - 'wrong_files' => $wrongFilesList, - 'wrong_files_num' => count($wrongFilesList), - 'total_num' => count($filesList), - 'timestamp' => TIMENOW, -]; - -$this->store('files_integrity', $data); diff --git a/library/includes/functions.php b/library/includes/functions.php index 2fc92f90a..e490ad930 100644 --- a/library/includes/functions.php +++ b/library/includes/functions.php @@ -197,6 +197,8 @@ $bf['user_opt'] = [ 'dis_post_edit' => 13, // [PROHIBITIONS] Block editing own posts / topics 'user_dls' => 14, // [SETTINGS] Hide list of "Current downloads" in my profile 'user_retracker' => 15, // [SETTINGS] Add my retracker into downloaded torrent files + 'user_hide_torrent_client' => 16, // [SETTINGS] Option to hide user's torrent client in peer list + 'user_hide_peer_country' => 17 // [SETTINGS] Option to hide user's country name in peer list ]; function bit2dec($bit_num) @@ -601,7 +603,13 @@ function bt_show_ip($ip, $port = '') if (IS_AM) { $ip = \TorrentPier\Helpers\IPHelper::long2ip_extended($ip); - $ip .= ($port) ? ":$port" : ''; + + // Wrap IPv6 address in square brackets + if ($port && str_contains($ip, ':')) { + $ip = "[$ip]"; + } + $ip .= $port ? ":$port" : ''; + return $ip; } @@ -876,8 +884,8 @@ function show_bt_userdata($user_id): void 'YS_BONUS' => humn_size($btu['up_bonus_yesterday']), 'YS_POINTS' => $btu['auth_key'] ? $btu['points_yesterday'] : '0.00', - 'SPEED_UP' => humn_size($btu['speed_up'], 0, 'KB') . '/s', - 'SPEED_DOWN' => humn_size($btu['speed_down'], 0, 'KB') . '/s', + 'SPEED_UP' => humn_size($btu['speed_up'], min: 'KB') . '/s', + 'SPEED_DOWN' => humn_size($btu['speed_down'], min: 'KB') . '/s', ]); } @@ -898,13 +906,16 @@ function bb_get_config($table, $from_db = false, $update_cache = true) { if ($from_db or !$cfg = CACHE('bb_config')->get("config_{$table}")) { $cfg = []; + foreach (DB()->fetch_rowset("SELECT * FROM $table") as $row) { $cfg[$row['config_name']] = $row['config_value']; } + if ($update_cache) { CACHE('bb_config')->set("config_{$table}", $cfg); } } + return $cfg; } @@ -1184,14 +1195,21 @@ function render_flag(string $code, bool $showName = true): string global $lang; static $iconExtension = '.svg'; + $nameIgnoreList = [ + 'WBW', + 'PACE', + 'LGBT' + ]; + if (isset($lang['COUNTRIES'][$code])) { if ($code === '0') { return ''; // No selected } else { $flagIconPath = BB_ROOT . 'styles/images/flags/' . $code . $iconExtension; if (is_file($flagIconPath)) { - $countryName = $showName ? ' ' . str_short($lang['COUNTRIES'][$code], 20) : ''; - return '' . $code . '' . $countryName . ''; + $langName = $lang['COUNTRIES'][$code]; + $countryName = ($showName && !in_array($code, $nameIgnoreList)) ? ' ' . str_short($langName, 20) : ''; + return '' . $code . '' . $countryName . ''; } } } @@ -1224,11 +1242,16 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add $total_pages = ceil($num_items / $per_page); $on_page = floor($start_item / $per_page) + 1; + $query_separator = '&'; + if (!str_contains($base_url, '?')) { + $query_separator = '?'; + } + $page_string = ''; if ($total_pages > ((2 * ($begin_end + $from_middle)) + 2)) { $init_page_max = ($total_pages > $begin_end) ? $begin_end : $total_pages; for ($i = 1; $i < $init_page_max + 1; $i++) { - $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; + $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; if ($i < $init_page_max) { $page_string .= ", "; } @@ -1242,7 +1265,7 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add $init_page_max = ($on_page < $total_pages - ($begin_end + $from_middle)) ? $on_page : $total_pages - ($begin_end + $from_middle); for ($i = $init_page_min - $from_middle; $i < $init_page_max + ($from_middle + 1); $i++) { - $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; + $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; if ($i < $init_page_max + $from_middle) { $page_string .= ', '; } @@ -1252,7 +1275,7 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add $page_string .= ' ... '; } for ($i = $total_pages - ($begin_end - 1); $i < $total_pages + 1; $i++) { - $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; + $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; if ($i < $total_pages) { $page_string .= ", "; } @@ -1260,7 +1283,7 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add } } else { for ($i = 1; $i < $total_pages + 1; $i++) { - $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; + $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; if ($i < $total_pages) { $page_string .= ', '; } @@ -1269,20 +1292,20 @@ function generate_pagination($base_url, $num_items, $per_page, $start_item, $add if ($add_prevnext_text) { if ($on_page > 1) { - $page_string = ' ' . $lang['PREVIOUS_PAGE'] . '  ' . $page_string; - $meta_prev_link = FULL_URL . $base_url . "&start=" . (($on_page - 2) * $per_page); + $page_string = ' ' . $lang['PREVIOUS_PAGE'] . '  ' . $page_string; + $meta_prev_link = FULL_URL . $base_url . "{$query_separator}start=" . (($on_page - 2) * $per_page); } if ($on_page < $total_pages) { - $page_string .= '  ' . $lang['NEXT_PAGE'] . ''; - $meta_next_link = FULL_URL . $base_url . "&start=" . ($on_page * $per_page); + $page_string .= '  ' . $lang['NEXT_PAGE'] . ''; + $meta_next_link = FULL_URL . $base_url . "{$query_separator}start=" . ($on_page * $per_page); } } $pagination = false; if ($page_string && $total_pages > 1) { $pagination = '' . $lang['GOTO_PAGE'] . ' :  ' . $page_string; - $pagination = str_replace('&start=0', '', $pagination); + $pagination = str_replace("{$query_separator}start=0", '', $pagination); } $template->assign_vars([ @@ -1577,7 +1600,7 @@ function build_topic_pagination($url, $replies, $per_page) return $pg; } -function print_confirmation($tpl_vars) +function print_confirmation($tpl_vars): void { global $template, $lang; @@ -1796,14 +1819,14 @@ function decode_text_match($txt) /** * Create magnet link * - * @param string $infohash - * @param string $infohash_v2 - * @param string $auth_key - * @param string $name - * + * @param string $infohash (xt=urn:btih) + * @param string $infohash_v2 (xt=urn:btmh:1220) + * @param string $auth_key (tr) + * @param string $name (dn) + * @param int|string $length (xl) * @return string */ -function create_magnet(string $infohash, string $infohash_v2, string $auth_key, string $name): string +function create_magnet(string $infohash, string $infohash_v2, string $auth_key, string $name, int|string $length = 0): string { global $bb_cfg, $images, $lang; @@ -1832,6 +1855,11 @@ function create_magnet(string $infohash, string $infohash_v2, string $auth_key, $magnet .= 'xt=urn:btmh:1220' . bin2hex($infohash_v2); } + $length = (int)$length; + if ($length > 0) { + $magnet .= '&xl=' . $length; + } + return ''; } @@ -1868,7 +1896,7 @@ function send_pm($user_id, $subject, $message, $poster_id = BOT_UID) $message = DB()->escape($message); if ($poster_id == BOT_UID) { - $poster_ip = '7f000001'; + $poster_ip = '0'; } elseif ($row = DB()->fetch_row("SELECT user_reg_ip FROM " . BB_USERS . " WHERE user_id = $poster_id")) { $poster_ip = $row['user_reg_ip']; } else { @@ -2044,56 +2072,51 @@ function hash_search($hash) } /** - * Ѐункция для получСния ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ Google ReCaptcha. - * - * @param $mode - * @param string $callback + * Function for checking captcha answer * + * @param string $mode * @return bool|string */ -function bb_captcha($mode, $callback = '') +function bb_captcha(string $mode): bool|string { global $bb_cfg, $lang; - $secret = $bb_cfg['captcha']['secret_key']; - $public = $bb_cfg['captcha']['public_key']; - $cp_theme = $bb_cfg['captcha']['theme'] ?? 'light'; + $settings = $bb_cfg['captcha']; + $settings['language'] = $bb_cfg['default_lang']; - if (!$bb_cfg['captcha']['disabled'] && (!$public || !$secret)) { - bb_die($lang['CAPTCHA_SETTINGS']); + // Checking captcha settings + if (!$settings['disabled'] && $settings['service'] !== 'text') { + if (empty($settings['public_key']) || empty($settings['secret_key'])) { + bb_die($lang['CAPTCHA_SETTINGS']); + } } - $reCaptcha = new \ReCaptcha\ReCaptcha($secret); - - switch ($mode) { - case 'get': - return " - -
    - "; - break; - - case 'check': - $resp = $reCaptcha->verify( - request_var('g-recaptcha-response', ''), - $_SERVER["REMOTE_ADDR"] - ); - if ($resp->isSuccess()) { - return true; - } - break; - - default: - bb_simple_die(__FUNCTION__ . ": invalid mode '$mode'"); + // Selecting captcha service + $captchaClasses = [ + 'googleV2' => \TorrentPier\Captcha\GoogleCaptchaV2::class, + 'googleV3' => \TorrentPier\Captcha\GoogleCaptchaV3::class, + 'hCaptcha' => \TorrentPier\Captcha\HCaptcha::class, + 'yandex' => \TorrentPier\Captcha\YandexSmartCaptcha::class, + 'cloudflare' => \TorrentPier\Captcha\CloudflareTurnstileCaptcha::class, + 'text' => \TorrentPier\Captcha\TextCaptcha::class + ]; + if (!isset($captchaClasses[$settings['service']])) { + bb_die(sprintf('Captcha service (%s) not supported', $settings['service'])); } + $captchaClass = $captchaClasses[$settings['service']]; + $captcha = new $captchaClass($settings); + + // Selection mode + if (isset($captcha)) { + switch ($mode) { + case 'get': + case 'check': + return $captcha->$mode(); + default: + bb_die(sprintf('Invalid mode: %s', $mode)); + } + } + return false; } @@ -2131,10 +2154,7 @@ function getBanInfo(?int $userId = null): ?array global $datastore; // Get bans info from datastore - if (!$bans = $datastore->get('ban_list')) { - $datastore->update('ban_list'); - $bans = $datastore->get('ban_list'); - } + $bans = $datastore->get('ban_list'); if (!isset($userId)) { return $bans; @@ -2166,19 +2186,48 @@ function readUpdaterFile(): array|bool */ function infoByIP(string $ipAddress, int $port = 0): array { - if (!$data = CACHE('bb_ip2countries')->get($ipAddress . '_' . $port)) { + global $bb_cfg; + + if (!$bb_cfg['ip2country_settings']['enabled']) { + return []; + } + + $ipAddress = \TorrentPier\Helpers\IPHelper::long2ip_extended($ipAddress); + $cacheName = hash('xxh128', ($ipAddress . '_' . $port)); + + if (!$data = CACHE('bb_ip2countries')->get($cacheName)) { $data = []; - $response = file_get_contents(API_IP_URL . $ipAddress); - $json = json_decode($response, true); - if (is_array($json) && !empty($json)) { - $data = [ - 'ipVersion' => $json['ipVersion'], - 'countryCode' => $json['countryCode'], - 'continent' => $json['continent'], - 'continentCode' => $json['continentCode'] + + $contextOptions = []; + if (!empty($bb_cfg['ip2country_settings']['api_token'])) { + $contextOptions['http'] = [ + 'header' => "Authorization: Bearer " . $bb_cfg['ip2country_settings']['api_token'] . "\r\n" ]; - CACHE('bb_ip2countries')->set($ipAddress . '_' . $port, $data, 1200); } + + $context = stream_context_create($contextOptions); + $response = file_get_contents($bb_cfg['ip2country_settings']['endpoint'] . $ipAddress, context: $context); + + if ($response !== false) { + $json = json_decode($response, true); + + if (is_array($json) && !empty($json)) { + $data = [ + 'ipVersion' => $json['ipVersion'], + 'countryCode' => $json['countryCode'], + 'continent' => $json['continent'], + 'continentCode' => $json['continentCode'] + ]; + } + } + + if (empty($data)) { + $data = [ + 'response' => false, + 'timestamp' => TIMENOW + ]; + } + CACHE('bb_ip2countries')->set($cacheName, $data, 1200); } return $data; diff --git a/library/includes/init_bb.php b/library/includes/init_bb.php index 14b14a72e..932dba5a1 100644 --- a/library/includes/init_bb.php +++ b/library/includes/init_bb.php @@ -299,6 +299,9 @@ define('HTML_DISABLED', ' disabled '); define('HTML_READONLY', ' readonly '); define('HTML_SELECTED', ' selected '); +define('EMAIL_TYPE_HTML', 'text/html'); +define('EMAIL_TYPE_TEXT', 'text/plain'); + // $GPC define('KEY_NAME', 0); // position in $GPC['xxx'] define('DEF_VAL', 1); @@ -384,11 +387,6 @@ $user = new TorrentPier\Legacy\Common\User(); $userdata =& $user->data; -/** - * Some shared defines - */ -define('TP_INSTANCE_HASH', $bb_cfg['tp_instance_hash']); - /** * Cron */ diff --git a/library/includes/page_footer.php b/library/includes/page_footer.php index c0f36d851..2eadbe6f2 100644 --- a/library/includes/page_footer.php +++ b/library/includes/page_footer.php @@ -14,9 +14,11 @@ if (!defined('BB_ROOT')) { global $bb_cfg, $userdata, $template, $DBS, $lang; if (!empty($template)) { + $birthday_tp = ((string)bb_date(TIMENOW, 'd.m', false) === '04.04') ? ' | 🎉🍰💚' : ''; + $template->assign_vars([ 'SIMPLE_FOOTER' => !empty($gen_simple_header), - 'POWERED' => 'Fueled by TorrentPier © 2005-' . date('Y'), + 'POWERED' => 'Fueled by TorrentPier © 2005-' . date('Y') . $birthday_tp, 'SHOW_ADMIN_LINK' => (IS_ADMIN && !defined('IN_ADMIN')), 'ADMIN_LINK_HREF' => 'admin/index.php', ]); @@ -33,7 +35,7 @@ if (!$bb_cfg['gzip_compress']) { if ($show_dbg_info) { $gen_time = utime() - TIMESTART; - $gen_time_txt = sprintf('%.4f', $gen_time); + $gen_time_txt = sprintf('%.3f', $gen_time); $gzip_text = UA_GZIP_SUPPORTED ? "{$lang['GZIP_COMPRESSION']}: " : "{$lang['GZIP_COMPRESSION']}: "; $gzip_text .= $bb_cfg['gzip_compress'] ? $lang['ON'] : $lang['OFF']; @@ -41,7 +43,7 @@ if ($show_dbg_info) { if (!empty($DBS)) { $sql_t = $DBS->sql_timetotal; - $sql_time_txt = ($sql_t) ? sprintf('%.4f ' . $lang['SEC'] . ' (%d%%) · ', $sql_t, round($sql_t * 100 / $gen_time)) : ''; + $sql_time_txt = ($sql_t) ? sprintf('%.3f ' . $lang['SEC'] . ' (%d%%) · ', $sql_t, round($sql_t * 100 / $gen_time)) : ''; $num_q = $DBS->num_queries; $stat .= "  |  {$DBS->get_db_obj()->engine}: {$sql_time_txt}{$num_q} " . $lang['QUERIES']; } diff --git a/library/includes/ucp/activate.php b/library/includes/ucp/activate.php index 4aac130de..b72660e1a 100644 --- a/library/includes/ucp/activate.php +++ b/library/includes/ucp/activate.php @@ -11,7 +11,7 @@ if (!defined('BB_ROOT')) { die(basename(__FILE__)); } -if (empty($_GET['u']) || empty($_GET['act_key'])) { +if (empty($_GET[POST_USERS_URL]) || empty($_GET['act_key'])) { bb_die('Bad request'); } diff --git a/library/includes/ucp/register.php b/library/includes/ucp/register.php index 111e67ce4..69a14add1 100644 --- a/library/includes/ucp/register.php +++ b/library/includes/ucp/register.php @@ -122,8 +122,8 @@ switch ($mode) { ]; // Select a profile: your own for the user, any for the admin - if (IS_ADMIN && !empty($_REQUEST['u'])) { - $pr_user_id = (int)$_REQUEST['u']; + if (IS_ADMIN && !empty($_REQUEST[POST_USERS_URL])) { + $pr_user_id = (int)$_REQUEST[POST_USERS_URL]; $adm_edit = ($pr_user_id != $userdata['user_id']); } else { $pr_user_id = $userdata['user_id']; @@ -365,6 +365,8 @@ foreach ($profile_fields as $field => $can_edit) { 'user_dls' => $reg_mode ? false : true, 'user_callseed' => $reg_mode ? true : true, 'user_retracker' => $reg_mode ? true : true, + 'user_hide_torrent_client' => $reg_mode ? true : true, + 'user_hide_peer_country' => $reg_mode ? true : $bb_cfg['ip2country_settings']['enabled'], ]; foreach ($update_user_opt as $opt => $can_change_opt) { @@ -565,7 +567,7 @@ foreach ($profile_fields as $field => $can_edit) { } } } - $tp_data['TEMPLATES_SELECT'] = \TorrentPier\Legacy\Select::template($pr_data['tpl_name'], 'tpl_name'); + $tp_data['TEMPLATES_SELECT'] = \TorrentPier\Legacy\Common\Select::template($pr_data['tpl_name'], 'tpl_name'); break; /** @@ -722,8 +724,8 @@ $template->assign_vars([ 'INVITE_CODE' => !empty($_GET['invite']) ? htmlCHR($_GET['invite']) : '', 'CAPTCHA_HTML' => ($need_captcha) ? bb_captcha('get') : '', - 'LANGUAGE_SELECT' => \TorrentPier\Legacy\Select::language($pr_data['user_lang'], 'user_lang'), - 'TIMEZONE_SELECT' => \TorrentPier\Legacy\Select::timezone($pr_data['user_timezone'], 'user_timezone'), + 'LANGUAGE_SELECT' => \TorrentPier\Legacy\Common\Select::language($pr_data['user_lang'], 'user_lang'), + 'TIMEZONE_SELECT' => \TorrentPier\Legacy\Common\Select::timezone($pr_data['user_timezone'], 'user_timezone'), 'AVATAR_EXPLAIN' => sprintf($lang['AVATAR_EXPLAIN'], $bb_cfg['avatars']['max_width'], $bb_cfg['avatars']['max_height'], humn_size($bb_cfg['avatars']['max_size'])), 'AVATAR_DISALLOWED' => bf($pr_data['user_opt'], 'user_opt', 'dis_avatar'), diff --git a/library/includes/ucp/viewprofile.php b/library/includes/ucp/viewprofile.php index 1b3e4f878..7dbc44541 100644 --- a/library/includes/ucp/viewprofile.php +++ b/library/includes/ucp/viewprofile.php @@ -76,7 +76,7 @@ if (bf($profiledata['user_opt'], 'user_opt', 'dis_sig')) { // Null ratio if ($bb_cfg['ratio_null_enabled'] && $btu = get_bt_userdata($profiledata['user_id'])) { - $template->assign_vars(array('NULLED_RATIO' => $btu['ratio_nulled'])); + $template->assign_vars(['NULLED_RATIO' => $btu['ratio_nulled']]); } // Ban information @@ -93,7 +93,7 @@ $template->assign_vars([ 'PROFILE_USER_ID' => $profiledata['user_id'], 'PROFILE_USER' => $profile_user_id, 'USER_REGDATE' => bb_date($profiledata['user_regdate'], 'Y-m-d H:i', false), - 'POSTER_RANK' => ($poster_rank) ? "" . $poster_rank . "" : $lang['USER'], + 'POSTER_RANK' => $poster_rank ? "" . $poster_rank . "" : $lang['USER'], 'RANK_IMAGE' => $rank_image, 'RANK_SELECT' => $rank_select, 'POSTS' => $profiledata['user_posts'], @@ -101,8 +101,8 @@ $template->assign_vars([ 'EMAIL' => $email, 'WWW' => $profiledata['user_website'], 'ICQ' => $profiledata['user_icq'], - 'LAST_VISIT_TIME' => ($profiledata['user_lastvisit']) ? (!$profile_user_id && bf($profiledata['user_opt'], 'user_opt', 'user_viewonline') && !IS_ADMIN) ? $lang['HIDDEN_USER'] : bb_date($profiledata['user_lastvisit'], 'Y-m-d H:i', false) : $lang['NEVER'], - 'LAST_ACTIVITY_TIME' => ($profiledata['user_session_time']) ? (!$profile_user_id && bf($profiledata['user_opt'], 'user_opt', 'user_viewonline') && !IS_ADMIN) ? $lang['HIDDEN_USER'] : bb_date($profiledata['user_session_time'], 'Y-m-d H:i', false) : $lang['NEVER'], + 'LAST_VISIT_TIME' => $profiledata['user_lastvisit'] ? (!$profile_user_id && bf($profiledata['user_opt'], 'user_opt', 'user_viewonline') && !IS_ADMIN) ? $lang['HIDDEN_USER'] : bb_date($profiledata['user_lastvisit'], 'Y-m-d H:i', false) : $lang['NEVER'], + 'LAST_ACTIVITY_TIME' => $profiledata['user_session_time'] ? (!$profile_user_id && bf($profiledata['user_opt'], 'user_opt', 'user_viewonline') && !IS_ADMIN) ? $lang['HIDDEN_USER'] : bb_date($profiledata['user_session_time'], 'Y-m-d H:i', false) : $lang['NEVER'], 'USER_ACTIVE' => $profiledata['user_active'], 'LOCATION' => render_flag($profiledata['user_from']), 'OCCUPATION' => $profiledata['user_occ'], diff --git a/library/includes/ucp/viewtorrent.php b/library/includes/ucp/viewtorrent.php index cfcd3cc34..6878423b4 100644 --- a/library/includes/ucp/viewtorrent.php +++ b/library/includes/ucp/viewtorrent.php @@ -60,7 +60,7 @@ if ($releasing) { 'TOR_TYPE' => is_gold($row['tor_type']), 'TOPIC_SEEDERS' => ($row['seeders']) ?: 0, 'TOPIC_LEECHERS' => ($row['leechers']) ?: 0, - 'SPEED_UP' => ($row['speed_up']) ? humn_size($row['speed_up'], 0, 'KB') . '/s' : '-', + 'SPEED_UP' => ($row['speed_up']) ? humn_size($row['speed_up'], min: 'KB') . '/s' : '-', ]); $releasing_count++; @@ -80,7 +80,7 @@ if ($seeding) { 'TOR_TYPE' => is_gold($row['tor_type']), 'TOPIC_SEEDERS' => ($row['seeders']) ?: 0, 'TOPIC_LEECHERS' => ($row['leechers']) ?: 0, - 'SPEED_UP' => ($row['speed_up']) ? humn_size($row['speed_up'], 0, 'KB') . '/s' : '-', + 'SPEED_UP' => ($row['speed_up']) ? humn_size($row['speed_up'], min: 'KB') . '/s' : '-', ]); $seeding_count++; @@ -103,7 +103,7 @@ if ($leeching) { 'TOR_TYPE' => is_gold($row['tor_type']), 'TOPIC_SEEDERS' => ($row['seeders']) ?: 0, 'TOPIC_LEECHERS' => ($row['leechers']) ?: 0, - 'SPEED_DOWN' => ($row['speed_down']) ? humn_size($row['speed_down'], 0, 'KB') . '/s' : '-', + 'SPEED_DOWN' => ($row['speed_down']) ? humn_size($row['speed_down'], min: 'KB') . '/s' : '-', ]); $leeching_count++; diff --git a/library/language/source/main.php b/library/language/source/main.php index 490968965..3f8da2cdc 100644 --- a/library/language/source/main.php +++ b/library/language/source/main.php @@ -1604,7 +1604,7 @@ $lang['ONLY_FOR_SUPER_ADMIN'] = 'This option only for super admins'; $lang['LOGS'] = 'Topic history'; $lang['FORUM_LOGS'] = 'History Forum'; -$lang['AUTOCLEAN'] = 'Autoclean:'; +$lang['AUTOCLEAN'] = 'Autoclean'; $lang['DESIGNER'] = 'Designer'; $lang['LAST_IP'] = 'Last IP:'; @@ -1879,6 +1879,8 @@ $lang['DL_ULR'] = 'ULR'; $lang['DL_STOPPED'] = 'stopped'; $lang['DL_UPD'] = 'upd: '; $lang['DL_INFO'] = 'shows data only for the current session'; +$lang['HIDE_PEER_TORRENT_CLIENT'] = 'Hide my BitTorrent client name in peer list'; +$lang['HIDE_PEER_COUNTRY_NAME'] = 'Hide my country name in peer list'; // Post PIN $lang['POST_PIN'] = 'Pin first post'; @@ -2322,14 +2324,6 @@ $lang['DISALLOWED_ALREADY'] = 'The name you entered could not be disallowed. It $lang['CLICK_RETURN_DISALLOWADMIN'] = 'Click %sHere%s to return to Disallow Username Administration'; -// Integrity check -$lang['INTEGRITY_CHECK_SUCCESS'] = 'TorrentPier files integrity check was successful!'; -$lang['INTEGRITY_CHECK_FAIL'] = 'Some TorrentPier files not pass integrity check!'; -$lang['INTEGRITY_CHECKED'] = 'Total checked: %s file(s), of which pass integrity check: %s file(s).'; -$lang['INTEGRITY_LAST_CHECK'] = 'Last check: %s.'; -$lang['INTEGRITY_RESTORE_ON_NEXT_RUN'] = 'Restore corrupt files on next integrity check?'; -$lang['INTEGRITY_RESTORE_CONFIRM_OK'] = 'Corrupt files will be restored on next integrity check!'; - // Version Check $lang['VERSION_INFORMATION'] = 'Version Information'; $lang['UPDATE_AVAILABLE'] = 'Update available'; @@ -3080,7 +3074,8 @@ $lang['UPLOAD_ERRORS'] = [ // Captcha $lang['CAPTCHA'] = 'Check that you are not a robot'; $lang['CAPTCHA_WRONG'] = 'You could not confirm that you are not a robot'; -$lang['CAPTCHA_SETTINGS'] = '

    ReCaptcha not being fully configured

    If you haven\'t already generated the keys, you can do it on https://www.google.com/recaptcha/admin.
    After you generate the keys, you need to put them at the file library/config.php.

    '; +$lang['CAPTCHA_SETTINGS'] = '

    Captcha is not fully configured

    Generate the keys using the dashboard of your captcha service, after you need to put them at the file library/config.php.

    '; +$lang['CAPTCHA_OCCURS_BACKGROUND'] = 'The CAPTCHA verification occurs in the background'; // Sending email $lang['REPLY_TO'] = 'Reply to'; diff --git a/playback_m3u.php b/playback_m3u.php index 74ddf32a2..3bf98fbd6 100644 --- a/playback_m3u.php +++ b/playback_m3u.php @@ -34,7 +34,7 @@ if (!$topic_id) { } // Getting torrent info from database -$sql = 'SELECT attach_id, info_hash, info_hash_v2 +$sql = 'SELECT attach_id, forum_id, info_hash, info_hash_v2 FROM ' . BB_BT_TORRENTS . ' WHERE topic_id = ' . $topic_id . ' LIMIT 1'; @@ -49,6 +49,15 @@ if (!$m3uFile = $torrServer->getM3UPath($row['attach_id'])) { bb_die($lang['ERROR_NO_ATTACHMENT']); } +$forum_id = $row['forum_id']; +set_die_append_msg($forum_id, $topic_id); + +// Check rights +$is_auth = auth(AUTH_ALL, $forum_id, $userdata); +if (!$is_auth['auth_download']) { + bb_die($lang['SORRY_AUTH_VIEW_ATTACH']); +} + // Parse M3U file $m3uParser = new M3uParser\M3uParser(); $m3uParser->addDefaultTags(); diff --git a/posting.php b/posting.php index 6bfc6105d..39d44c373 100644 --- a/posting.php +++ b/posting.php @@ -625,10 +625,6 @@ $template->assign_vars([ 'POSTER_RGROUPS' => !empty($poster_rgroups) ? $poster_rgroups : '', 'ATTACH_RG_SIG' => $switch_rg_sig ?: false, - // todo: remove (cuz unused) - 'U_VIEWTOPIC' => ($mode == 'reply') ? TOPIC_URL . "$topic_id&postorder=desc" : '', - // todo: end - 'S_NOTIFY_CHECKED' => $notify_user ? 'checked' : '', 'S_ROBOTS_CHECKED' => $robots_indexing ? 'checked' : '', 'S_TYPE_TOGGLE' => $topic_type_toggle, diff --git a/src/Captcha/CaptchaInterface.php b/src/Captcha/CaptchaInterface.php new file mode 100644 index 000000000..21a749182 --- /dev/null +++ b/src/Captcha/CaptchaInterface.php @@ -0,0 +1,38 @@ +settings = $settings; + } + + /** + * Returns captcha widget + * + * @return string + */ + public function get(): string + { + return " + +
    + "; + } + + /** + * Checking captcha answer + * + * @return bool + */ + public function check(): bool + { + $turnstileResponse = $_POST['cf-turnstile-response'] ?? ''; + $postFields = "secret={$this->settings['secret_key']}&response=$turnstileResponse"; + + $ch = curl_init($this->verifyEndpoint); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields); + $response = curl_exec($ch); + curl_close($ch); + + $responseData = json_decode($response); + return $responseData->success; + } +} diff --git a/src/Captcha/GoogleCaptchaV2.php b/src/Captcha/GoogleCaptchaV2.php new file mode 100644 index 000000000..a9e01f6ba --- /dev/null +++ b/src/Captcha/GoogleCaptchaV2.php @@ -0,0 +1,69 @@ +settings = $settings; + } + + /** + * Returns captcha widget + * + * @return string + */ + public function get(): string + { + return " + +
    + "; + } + + /** + * Checking captcha answer + * + * @return bool + */ + public function check(): bool + { + $reCaptcha = new ReCaptcha($this->settings['secret_key']); + $resp = $reCaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']); + + return $resp->isSuccess(); + } +} diff --git a/src/Captcha/GoogleCaptchaV3.php b/src/Captcha/GoogleCaptchaV3.php new file mode 100644 index 000000000..855066861 --- /dev/null +++ b/src/Captcha/GoogleCaptchaV3.php @@ -0,0 +1,72 @@ +settings = $settings; + } + + /** + * Returns captcha widget + * + * @return string + */ + public function get(): string + { + global $lang; + + return "{$lang['CAPTCHA_OCCURS_BACKGROUND']} + + + "; + } + + /** + * Checking captcha answer + * + * @return bool + */ + public function check(): bool + { + $reCaptcha = new ReCaptcha($this->settings['secret_key']); + $resp = $reCaptcha + ->setScoreThreshold(0.5) + ->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']); + + return $resp->isSuccess(); + } +} diff --git a/src/Captcha/HCaptcha.php b/src/Captcha/HCaptcha.php new file mode 100644 index 000000000..7484a77ff --- /dev/null +++ b/src/Captcha/HCaptcha.php @@ -0,0 +1,76 @@ +settings = $settings; + } + + /** + * Returns captcha widget + * + * @return string + */ + public function get(): string + { + return " +
    + "; + } + + /** + * Checking captcha answer + * + * @return bool + */ + public function check(): bool + { + $data = [ + 'secret' => $this->settings['secret_key'], + 'response' => $_POST['h-captcha-response'] ?? null, + ]; + + $verify = curl_init(); + curl_setopt($verify, CURLOPT_URL, $this->verifyEndpoint); + curl_setopt($verify, CURLOPT_POST, true); + curl_setopt($verify, CURLOPT_POSTFIELDS, http_build_query($data)); + curl_setopt($verify, CURLOPT_RETURNTRANSFER, true); + $response = curl_exec($verify); + + $responseData = json_decode($response); + return $responseData->success; + } +} diff --git a/src/Captcha/TextCaptcha.php b/src/Captcha/TextCaptcha.php new file mode 100644 index 000000000..20ca6deb5 --- /dev/null +++ b/src/Captcha/TextCaptcha.php @@ -0,0 +1,72 @@ +captcha = new CaptchaBuilder; + $this->captcha->setScatterEffect(false); + } + + /** + * Returns captcha widget + * + * @return string + */ + public function get(): string + { + $_SESSION['phrase'] = $this->captcha->getPhrase(); + $this->captcha->build(); + + return " +
    + + "; + } + + /** + * Checking captcha answer + * + * @return bool + */ + public function check(): bool + { + if (!isset($_POST['captcha_phrase']) || !isset($_SESSION['phrase'])) { + return false; + } + + return PhraseBuilder::comparePhrases($_SESSION['phrase'], $_POST['captcha_phrase']); + } +} diff --git a/src/Captcha/YandexSmartCaptcha.php b/src/Captcha/YandexSmartCaptcha.php new file mode 100644 index 000000000..e5c77fb5a --- /dev/null +++ b/src/Captcha/YandexSmartCaptcha.php @@ -0,0 +1,84 @@ +settings = $settings; + } + + /** + * Returns captcha widget + * + * @return string + */ + public function get(): string + { + return " + +
    "; + } + + /** + * Checking captcha answer + * + * @return bool + */ + public function check(): bool + { + $ch = curl_init($this->verifyEndpoint); + $args = [ + 'secret' => $this->settings['secret_key'], + 'token' => $_POST['smart-token'] ?? null, + 'ip' => $_SERVER['REMOTE_ADDR'], + ]; + + curl_setopt($ch, CURLOPT_TIMEOUT, 1); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($args)); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + $serverOutput = curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($httpCode !== 200) { + return true; + } + + $resp = json_decode($serverOutput); + return ($resp->status === 'ok'); + } +} diff --git a/src/Censor.php b/src/Censor.php index 9f8001713..5b4d00a73 100644 --- a/src/Censor.php +++ b/src/Censor.php @@ -41,14 +41,7 @@ class Censor } // Get censored words - if (!$censoredWords = $datastore->get('censor')) { - $datastore->update('censor'); - $censoredWords = $datastore->get('censor'); - } - - if (isset($censoredWords['no_words'])) { - return; - } + $censoredWords = $datastore->get('censor'); foreach ($censoredWords as $word) { $this->words[] = '#(?dbg as $i => $dbg) { $id = "sql_{$i}_" . random_int(0, mt_getrandmax()); $sql = self::shortQuery($dbg['sql'], true); - $time = sprintf('%.4f', $dbg['time']); + $time = sprintf('%.3f', $dbg['time']); $perc = '[' . round($dbg['time'] * 100 / $db_obj->sql_timetotal) . '%]'; $info = !empty($dbg['info']) ? $dbg['info'] . ' [' . $dbg['src'] . ']' : $dbg['src']; diff --git a/src/Emailer.php b/src/Emailer.php index 1b9b9d751..7330f9405 100644 --- a/src/Emailer.php +++ b/src/Emailer.php @@ -9,6 +9,8 @@ namespace TorrentPier; +use Exception; + use Symfony\Component\Mailer\Exception\TransportExceptionInterface; use Symfony\Component\Mailer\Mailer; use Symfony\Component\Mailer\Transport\SendmailTransport; @@ -98,12 +100,12 @@ class Emailer $tpl_file = LANG_ROOT_DIR . '/' . $bb_cfg['default_lang'] . '/email/' . $template_file . '.html'; if (!is_file($tpl_file)) { - bb_die('Could not find email template file: ' . $template_file); + throw new Exception('Could not find email template file: ' . $template_file); } } if (!$fd = fopen($tpl_file, 'rb')) { - bb_die('Failed opening email template file: ' . $tpl_file); + throw new Exception('Failed opening email template file: ' . $tpl_file); } $this->tpl_msg[$template_lang . $template_file] = fread($fd, filesize($tpl_file)); @@ -119,6 +121,7 @@ class Emailer * @param string $email_format * * @return bool + * @throws Exception */ public function send(string $email_format = 'text/plain'): bool { @@ -156,7 +159,7 @@ class Emailer $transport = new EsmtpTransport('localhost', 25); } } else { - $transport = new SendmailTransport('/usr/sbin/sendmail -bs'); + $transport = new SendmailTransport($bb_cfg['emailer']['sendmail_command']); } $mailer = new Mailer($transport); @@ -176,10 +179,15 @@ class Emailer $message->getHeaders() ->addTextHeader('X-Auto-Response-Suppress', 'OOF, DR, RN, NRN, AutoReply'); - if ($email_format == 'text/html') { - $message->html($this->message); - } else { - $message->text($this->message); + switch ($email_format) { + case EMAIL_TYPE_HTML: + $message->html($this->message); + break; + case EMAIL_TYPE_TEXT: + $message->text($this->message); + break; + default: + throw new Exception('Unknown email format: ' . $email_format); } /** Send message */ diff --git a/src/Env.php b/src/Env.php index 79391faef..52e1e7cac 100644 --- a/src/Env.php +++ b/src/Env.php @@ -62,7 +62,7 @@ class Env /** * Get the environment repository instance. * - * @return RepositoryInterface + * @return RepositoryInterface|null */ public static function getRepository(): ?RepositoryInterface { @@ -83,10 +83,10 @@ class Env * Gets the value of an environment variable. * * @param string $key - * @param mixed $default + * @param mixed|null $default * @return mixed */ - public static function get(string $key, $default = null) + public static function get(string $key, mixed $default = null): mixed { return Option::fromValue(static::getRepository()->get($key)) ->map(function ($value) { diff --git a/src/IndexNow.php b/src/IndexNow.php deleted file mode 100644 index 87511d17b..000000000 --- a/src/IndexNow.php +++ /dev/null @@ -1,83 +0,0 @@ - 'yandex.com', - 'bing' => 'bing.com', - 'seznam' => 'search.seznam.cz', - 'naver' => 'searchadvisor.naver.com' - ]; - - public function __construct() - { - global $bb_cfg; - - $this->indexNow = new \Nemorize\Indexnow\Indexnow(); - $this->indexNow->setKey($bb_cfg['indexnow_key']); - if (in_array($bb_cfg['indexnow_settings']['host'], array_keys($this->hosts))) { - $this->indexNow->setHost($this->hosts[$bb_cfg['indexnow_settings']['host']]); - } else { - bb_log("IndexNow (ERROR): Invalid host: {$bb_cfg['indexnow_settings']['host']}\n", self::$logFile); - bb_die('Invalid host: ' . $bb_cfg['indexnow_settings']['host']); - } - $this->indexNow->setKeyLocation(FULL_URL . $bb_cfg['indexnow_key'] . self::$keyFileExtension); - } - - /** - * Submit page to IndexNow - * - * @param string $url - * @return void - */ - public function submit(string $url): void - { - try { - $this->indexNow->submit($url); - } catch (IndexnowException $e) { - bb_log("IndexNow (ERROR) [$url]: Message: {$e->getMessage()}\n", self::$logFile); - bb_die($e->getMessage()); - } - } -} diff --git a/src/Legacy/Atom.php b/src/Legacy/Atom.php index 21d65d7ac..10b78422e 100644 --- a/src/Legacy/Atom.php +++ b/src/Legacy/Atom.php @@ -25,10 +25,17 @@ class Atom */ public static function update_forum_feed($forum_id, $forum_data) { - global $bb_cfg, $lang; + global $bb_cfg, $lang, $datastore; $sql = null; $file_path = $bb_cfg['atom']['path'] . '/f/' . $forum_id . '.atom'; $select_tor_sql = $join_tor_sql = ''; + + if (!$forums = $datastore->get('cat_forums')) { + $datastore->update('cat_forums'); + $forums = $datastore->get('cat_forums'); + } + $not_forums_id = $forums['not_auth_forums']['guest_view']; + if ($forum_id == 0) { $forum_data['forum_name'] = $lang['ATOM_GLOBAL_FEED'] ?? $bb_cfg['server_name']; } @@ -77,6 +84,9 @@ class Atom $topics_tmp = DB()->fetch_rowset($sql); $topics = []; foreach ($topics_tmp as $topic) { + if (in_array($topic['topic_id'], explode(',', $not_forums_id))) { + continue; + } if (isset($topic['topic_status'])) { if ($topic['topic_status'] == TOPIC_MOVED) { continue; diff --git a/src/Legacy/Attach.php b/src/Legacy/Attach.php index c85593abb..3123a2aa5 100644 --- a/src/Legacy/Attach.php +++ b/src/Legacy/Attach.php @@ -67,7 +67,7 @@ class Attach $this->attachment_extension_list = get_var('extension_list', ['']); $this->attachment_mimetype_list = get_var('mimetype_list', ['']); - $this->filename = (isset($_FILES['fileupload'], $_FILES['fileupload']['name']) && $_FILES['fileupload']['name'] !== 'none') ? trim(stripslashes($_FILES['fileupload']['name'])) : ''; + $this->filename = (isset($_FILES['fileupload']['name']) && $_FILES['fileupload']['name'] !== 'none') ? trim(stripslashes($_FILES['fileupload']['name'])) : ''; $this->attachment_list = get_var('attachment_list', ['']); $this->attachment_thumbnail_list = get_var('attach_thumbnail_list', [0]); @@ -431,7 +431,7 @@ class Attach } } - // Get current informations to delete the Old Attachment + // Get current information to delete the Old Attachment $sql = 'SELECT physical_filename, comment, thumbnail FROM ' . BB_ATTACHMENTS_DESC . ' WHERE attach_id = ' . (int)$attachment_id; diff --git a/src/Legacy/BBCode.php b/src/Legacy/BBCode.php index 06efda6eb..1bd517c47 100644 --- a/src/Legacy/BBCode.php +++ b/src/Legacy/BBCode.php @@ -9,8 +9,6 @@ namespace TorrentPier\Legacy; -use function in_array; - /** * Class BBCode * @package TorrentPier\Legacy @@ -21,7 +19,7 @@ class BBCode public array $tpl = []; /** @var array $smilies Replacements for smilies */ - public $smilies; + public array $smilies = []; /** @var array $tidy_cfg Tidy preprocessor configuration */ public array $tidy_cfg = [ @@ -338,11 +336,16 @@ class BBCode { global $datastore; - if (null === $this->smilies) { - $this->smilies = $datastore->get('smile_replacements'); - } + $this->smilies = $datastore->get('smile_replacements'); + + if (!empty($this->smilies)) { + if (defined('IN_ADMIN')) { + foreach ($this->smilies['repl'] as &$smile) { + $smile = preg_replace('/src="([^"]+)"/', 'src="./../$1"', $smile); + } + unset($smile); + } - if ($this->smilies) { /** @noinspection NestedPositiveIfStatementsInspection */ if ($parsed_text = preg_replace($this->smilies['orig'], $this->smilies['repl'], $text)) { return $parsed_text; @@ -388,7 +391,7 @@ class BBCode { global $bb_cfg; - if (in_array(parse_url($href, PHP_URL_HOST), $bb_cfg['nofollow']['allowed_url']) || $bb_cfg['nofollow']['disabled']) { + if (\in_array(parse_url($href, PHP_URL_HOST), $bb_cfg['nofollow']['allowed_url']) || $bb_cfg['nofollow']['disabled']) { $link = "$name"; } else { $link = "$name"; diff --git a/src/Legacy/Cache/APCu.php b/src/Legacy/Cache/APCu.php index 6e3b26fec..d7e4eb8ed 100644 --- a/src/Legacy/Cache/APCu.php +++ b/src/Legacy/Cache/APCu.php @@ -116,7 +116,7 @@ class APCu extends Common * @param string|null $name * @return bool */ - public function rm(string $name = null): bool + public function rm(?string $name = null): bool { $targetMethod = is_string($name) ? 'delete' : 'flush'; $name = is_string($name) ? $this->prefix . $name : null; diff --git a/src/Legacy/Cache/Memcached.php b/src/Legacy/Cache/Memcached.php index ddbc1b02c..4c5c5225b 100644 --- a/src/Legacy/Cache/Memcached.php +++ b/src/Legacy/Cache/Memcached.php @@ -172,7 +172,7 @@ class Memcached extends Common * @param string|null $name * @return bool */ - public function rm(string $name = null): bool + public function rm(?string $name = null): bool { if (!$this->connected) { $this->connect(); diff --git a/src/Legacy/Cache/Redis.php b/src/Legacy/Cache/Redis.php index d20c53aa8..08a6a16ab 100644 --- a/src/Legacy/Cache/Redis.php +++ b/src/Legacy/Cache/Redis.php @@ -174,7 +174,7 @@ class Redis extends Common * @param string|null $name * @return bool */ - public function rm(string $name = null): bool + public function rm(?string $name = null): bool { if (!$this->connected) { $this->connect(); diff --git a/src/Legacy/Cache/Sqlite.php b/src/Legacy/Cache/Sqlite.php index b6ba7f347..ae38a7699 100644 --- a/src/Legacy/Cache/Sqlite.php +++ b/src/Legacy/Cache/Sqlite.php @@ -126,7 +126,7 @@ class Sqlite extends Common * @param string|null $name * @return bool */ - public function rm(string $name = null): bool + public function rm(?string $name = null): bool { $targetMethod = is_string($name) ? 'delete' : 'flush'; $name = is_string($name) ? $this->prefix . $name : null; diff --git a/src/Legacy/Select.php b/src/Legacy/Common/Select.php similarity index 97% rename from src/Legacy/Select.php rename to src/Legacy/Common/Select.php index 6dc3de2e0..424c99869 100644 --- a/src/Legacy/Select.php +++ b/src/Legacy/Common/Select.php @@ -7,11 +7,11 @@ * @license https://github.com/torrentpier/torrentpier/blob/master/LICENSE MIT License */ -namespace TorrentPier\Legacy; +namespace TorrentPier\Legacy\Common; /** * Class Select - * @package TorrentPier\Legacy + * @package TorrentPier\Legacy\Common */ class Select { diff --git a/src/Legacy/Common/Upload.php b/src/Legacy/Common/Upload.php index 858b59fc7..685614803 100644 --- a/src/Legacy/Common/Upload.php +++ b/src/Legacy/Common/Upload.php @@ -9,6 +9,9 @@ namespace TorrentPier\Legacy\Common; +use claviska\SimpleImage; +use Exception; + /** * Class Upload * @package TorrentPier\Legacy\Common @@ -165,14 +168,14 @@ class Upload if (($this->cfg['max_width'] && $width > $this->cfg['max_width']) || ($this->cfg['max_height'] && $height > $this->cfg['max_height'])) { for ($i = 0, $max_try = 3; $i <= $max_try; $i++) { try { - $image = new \claviska\SimpleImage(); + $image = new SimpleImage(); $image ->fromFile($this->file['tmp_name']) ->autoOrient() ->resize($this->cfg['max_width'], $this->cfg['max_height']) ->toFile($this->file['tmp_name']); break; - } catch (\Exception $e) { + } catch (Exception $e) { if ($i == $max_try) { $this->errors[] = sprintf($lang['UPLOAD_ERROR_DIMENSIONS'], $this->cfg['max_width'], $this->cfg['max_height']); return false; diff --git a/src/Legacy/Common/User.php b/src/Legacy/Common/User.php index a5d69497f..b1a6a6713 100644 --- a/src/Legacy/Common/User.php +++ b/src/Legacy/Common/User.php @@ -590,7 +590,8 @@ class User return; } // prevent multiple calling - if (IS_GUEST && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { // Apply browser language + // Apply browser language + if ($bb_cfg['auto_language_detection'] && IS_GUEST && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $http_accept_language = locale_get_primary_language(locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE'])); if (isset($bb_cfg['lang'][$http_accept_language])) { $bb_cfg['default_lang'] = $http_accept_language; diff --git a/src/Legacy/Datastore/Common.php b/src/Legacy/Datastore/Common.php index c7d1b24a3..53f148d6e 100644 --- a/src/Legacy/Datastore/Common.php +++ b/src/Legacy/Datastore/Common.php @@ -43,7 +43,6 @@ class Common 'cat_forums' => 'build_cat_forums.php', 'censor' => 'build_censor.php', 'check_updates' => 'build_check_updates.php', - 'files_integrity' => 'build_files_integrity.php', 'jumpbox' => 'build_cat_forums.php', 'viewtopic_forum_select' => 'build_cat_forums.php', 'latest_news' => 'build_cat_forums.php', diff --git a/src/Legacy/Post.php b/src/Legacy/Post.php index 4c0736e86..0a08cb3d2 100644 --- a/src/Legacy/Post.php +++ b/src/Legacy/Post.php @@ -10,7 +10,6 @@ namespace TorrentPier\Legacy; use TorrentPier\Emailer; -use TorrentPier\IndexNow; use TorrentPier\Legacy\Admin\Common; use TorrentPier\Validate; @@ -159,7 +158,7 @@ class Post topic_id = $topic_id "; - $sql = ($mode != "editpost") ? $sql_insert : $sql_update; + $sql = ($mode != 'editpost') ? $sql_insert : $sql_update; if (!DB()->sql_query($sql)) { bb_die('Error in posting #1'); @@ -178,7 +177,7 @@ class Post DB()->sql_query("UPDATE " . BB_TOPICS . " SET topic_last_post_time = $current_time WHERE topic_id = $topic_id LIMIT 1"); } - $sql = ($mode != "editpost") ? "INSERT INTO " . BB_POSTS . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, poster_rg_id, attach_rg_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '" . USER_IP . "', $poster_rg_id, $attach_rg_sig)" : "UPDATE " . BB_POSTS . " SET post_username = '$post_username'" . $edited_sql . ", poster_rg_id = $poster_rg_id, attach_rg_sig = $attach_rg_sig WHERE post_id = $post_id"; + $sql = ($mode != 'editpost') ? "INSERT INTO " . BB_POSTS . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, poster_rg_id, attach_rg_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '" . USER_IP . "', $poster_rg_id, $attach_rg_sig)" : "UPDATE " . BB_POSTS . " SET post_username = '$post_username'" . $edited_sql . ", poster_rg_id = $poster_rg_id, attach_rg_sig = $attach_rg_sig WHERE post_id = $post_id"; if (!DB()->sql_query($sql)) { bb_die('Error in posting #2'); } @@ -221,12 +220,6 @@ class Post } } - // Send IndexNow - if ($bb_cfg['indexnow_settings']['enabled'] && ($mode === 'newtopic' || $mode === 'editpost')) { - $indexNow = new IndexNow(); - $indexNow->submit(FULL_URL . POST_URL . "$post_id#$post_id"); - } - meta_refresh(POST_URL . "$post_id#$post_id"); set_die_append_msg($forum_id, $topic_id); @@ -444,7 +437,7 @@ class Post $post_time = TIMENOW; $poster_id = BOT_UID; - $poster_ip = '7f000001'; + $poster_ip = '0'; if ($mode == 'after_move') { if (!$forum_id || !$old_forum_id) { diff --git a/src/Legacy/SqlDb.php b/src/Legacy/SqlDb.php index 3fa1dbab8..366108923 100644 --- a/src/Legacy/SqlDb.php +++ b/src/Legacy/SqlDb.php @@ -832,7 +832,7 @@ class SqlDb */ public function log_query($log_file = 'sql_queries') { - $q_time = ($this->cur_query_time >= 10) ? round($this->cur_query_time, 0) : sprintf('%.4f', $this->cur_query_time); + $q_time = ($this->cur_query_time >= 10) ? round($this->cur_query_time, 0) : sprintf('%.3f', $this->cur_query_time); $msg = []; $msg[] = round($this->sql_starttime); $msg[] = date('m-d H:i:s', (int)$this->sql_starttime); @@ -943,7 +943,7 @@ class SqlDb $this->explain_out .= ' - + diff --git a/src/Legacy/Torrent.php b/src/Legacy/Torrent.php index 7489b10ac..791ff30bd 100644 --- a/src/Legacy/Torrent.php +++ b/src/Legacy/Torrent.php @@ -644,7 +644,11 @@ class Torrent // Send torrent $output = Bencode::encode($tor); - $dl_fname = html_ent_decode($topic_title) . ' [' . $bb_cfg['server_name'] . '-' . $topic_id . ']' . '.' . TORRENT_EXT; + if ($bb_cfg['tracker']['use_old_torrent_name_format']) { + $dl_fname = '[' . $bb_cfg['server_name'] . '].t' . $topic_id . '.' . TORRENT_EXT; + } else { + $dl_fname = html_ent_decode($topic_title) . ' [' . $bb_cfg['server_name'] . '-' . $topic_id . ']' . '.' . TORRENT_EXT; + } if (!empty($_COOKIE['explain'])) { $out = "attach path: $filename

    "; diff --git a/src/Sitemap.php b/src/Sitemap.php index 90a4d0f54..f3fc70538 100644 --- a/src/Sitemap.php +++ b/src/Sitemap.php @@ -37,13 +37,24 @@ class Sitemap } $not_forums_id = $forums['not_auth_forums']['guest_view']; - $ignore_forum_sql = $not_forums_id ? "WHERE forum_id NOT IN($not_forums_id)" : ''; + $ignore_forum_sql = $not_forums_id ? "WHERE f.forum_id NOT IN($not_forums_id)" : ''; - $sql = DB()->sql_query("SELECT forum_id, forum_name FROM " . BB_FORUMS . " " . $ignore_forum_sql . " ORDER BY forum_id ASC"); + $sql = DB()->sql_query(" + SELECT + f.forum_id, + f.forum_name, + MAX(t.topic_time) AS last_topic_time + FROM " . BB_FORUMS . " f + LEFT JOIN " . BB_TOPICS . " t ON f.forum_id = t.forum_id + " . $ignore_forum_sql . " + GROUP BY f.forum_id, f.forum_name + ORDER BY f.forum_id ASC + "); while ($row = DB()->sql_fetchrow($sql)) { $forumUrls[] = [ 'url' => FORUM_URL . $row['forum_id'], + 'time' => $row['last_topic_time'] ]; } @@ -69,12 +80,12 @@ class Sitemap $not_forums_id = $forums['not_auth_forums']['guest_view']; $ignore_forum_sql = $not_forums_id ? "WHERE forum_id NOT IN($not_forums_id)" : ''; - $sql = DB()->sql_query("SELECT topic_id, topic_title, topic_time FROM " . BB_TOPICS . " " . $ignore_forum_sql . " ORDER BY topic_time ASC"); + $sql = DB()->sql_query("SELECT topic_id, topic_title, topic_last_post_time FROM " . BB_TOPICS . " " . $ignore_forum_sql . " ORDER BY topic_last_post_time ASC"); while ($row = DB()->sql_fetchrow($sql)) { $topicUrls[] = [ 'url' => TOPIC_URL . $row['topic_id'], - 'time' => $row['topic_time'], + 'time' => $row['topic_last_post_time'], ]; } @@ -120,7 +131,7 @@ class Sitemap $sitemap = new STM(SITEMAP_DIR . '/sitemap_dynamic.xml'); foreach ($this->getForumUrls() as $forum) { - $sitemap->addItem(make_url($forum['url']), time(), STM::HOURLY, 0.7); + $sitemap->addItem(make_url($forum['url']), $forum['time'], STM::HOURLY, 0.7); } foreach ($this->getTopicUrls() as $topic) { diff --git a/src/TorrServerAPI.php b/src/TorrServerAPI.php index 4fdfb6e14..3764c56e6 100644 --- a/src/TorrServerAPI.php +++ b/src/TorrServerAPI.php @@ -47,13 +47,6 @@ class TorrServerAPI 'extension' => '.m3u' ]; - /** - * Log filename - * - * @var string - */ - private string $logFile = 'torr_server'; - /** * TorrServer constructor */ @@ -92,7 +85,7 @@ class TorrServerAPI ]); $isSuccess = $curl->httpStatusCode === 200; if (!$isSuccess) { - bb_log("TorrServer (ERROR) [$this->url]: Response code: {$curl->httpStatusCode} | Content: {$curl->response}\n", $this->logFile); + bb_log("TorrServer (ERROR) [$this->url]: Response code: {$curl->httpStatusCode} | Content: {$curl->response}" . LOG_LF); } $curl->close(); @@ -147,7 +140,7 @@ class TorrServerAPI file_put_contents($m3uFile, $curl->response); } } else { - bb_log("TorrServer (ERROR) [$this->url]: Response code: {$curl->httpStatusCode} | Content: {$curl->response}\n", $this->logFile); + bb_log("TorrServer (ERROR) [$this->url]: Response code: {$curl->httpStatusCode} | Content: {$curl->response}" . LOG_LF); } $curl->close(); @@ -187,7 +180,7 @@ class TorrServerAPI if (unlink($m3uFile)) { return true; } else { - bb_log("TorrServer (ERROR) [removeM3U()]: Can't unlink file '$m3uFile'\n", $this->logFile); + bb_log("TorrServer (ERROR) [removeM3U()]: Can't unlink file '$m3uFile'" . LOG_LF); } } @@ -229,7 +222,7 @@ class TorrServerAPI if ($curl->httpStatusCode === 200 && !empty($response->{$index})) { CACHE('tr_cache')->set("ffprobe_m3u_$attach_id", $response, 3600); } else { - bb_log("TorrServer (ERROR) [$this->url]: Response code: {$curl->httpStatusCode}\n", $this->logFile); + bb_log("TorrServer (ERROR) [$this->url]: Response code: {$curl->httpStatusCode}" . LOG_LF); } $curl->close(); } @@ -254,7 +247,7 @@ class TorrServerAPI $curl->get($this->url . $this->endpoints['stream'], ['link' => $hash]); $isSuccess = $curl->httpStatusCode === 200; if (!$isSuccess) { - bb_log("TorrServer (ERROR) [$this->url]: Response code: {$curl->httpStatusCode} | Content: {$curl->response}\n", $this->logFile); + bb_log("TorrServer (ERROR) [$this->url]: Response code: {$curl->httpStatusCode} | Content: {$curl->response}" . LOG_LF); } $curl->close(); diff --git a/src/Updater.php b/src/Updater.php index c27242d09..5ccba7843 100644 --- a/src/Updater.php +++ b/src/Updater.php @@ -45,7 +45,7 @@ class Updater */ private const STREAM_CONTEXT = [ 'http' => [ - 'header' => 'User-Agent: ' . APP_NAME . '-' . TP_INSTANCE_HASH, + 'header' => 'User-Agent: ' . APP_NAME . '-' . TIMENOW, 'timeout' => 10, 'ignore_errors' => true ] @@ -130,14 +130,14 @@ class Updater } /** - * Returns information of latest TorrentPier version + * Returns information of latest TorrentPier version available * - * @param bool $allowRC + * @param bool $allowPreReleases * @return array */ - public function getLastVersion(bool $allowRC = true): array + public function getLastVersion(bool $allowPreReleases = true): array { - if (!$allowRC) { + if (!$allowPreReleases) { foreach ($this->jsonResponse as $index) { if (isset($index['prerelease']) && $index['prerelease']) { continue; diff --git a/styles/js/bbcode.js b/styles/js/bbcode.js index b9a53b46b..2ae20acc6 100644 --- a/styles/js/bbcode.js +++ b/styles/js/bbcode.js @@ -437,7 +437,7 @@ function initMedia(context) { a.className = 'YTLink'; a.innerHTML = ''; window.addEvent(a, 'click', function (e) { - var vhref = e.target.nextSibling.href.replace(/^http(?:s|):\/\/www.youtube.com\/watch\?(.*)?(&?v=([a-z0-9\-_]+))(.*)?|http:\/\/youtu.be\//ig, "http://www.youtube.com/embed/$3"); + var vhref = e.target.nextSibling.href.replace(/^http(?:s|):\/\/www.youtube.com\/watch\?(.*)?(&?v=([a-z0-9\-_]+))(.*)?|http:\/\/youtu.be\//ig, "https://www.youtube.com/embed/$3"); var text = e.target.nextSibling.innerText !== "" ? e.target.nextSibling.innerText : e.target.nextSibling.href; $('#Panel_youtube').remove(); ypanel('youtube', { diff --git a/styles/js/main.js b/styles/js/main.js index c195ceed4..6c6f5489c 100644 --- a/styles/js/main.js +++ b/styles/js/main.js @@ -460,19 +460,33 @@ $(document).ready(function () { /** * Autocomplete password **/ -var array_for_rand_pass = ["a", "A", "b", "B", "c", "C", "d", "D", "e", "E", "f", "F", "g", "G", "h", "H", "i", "I", "j", "J", "k", "K", "l", "L", "m", "M", "n", "N", "o", "O", "p", "P", "q", "Q", "r", "R", "s", "S", "t", "T", "u", "U", "v", "V", "w", "W", "x", "X", "y", "Y", "z", "Z", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; -var array_rand = function (array) { - var array_length = array.length; - var result = Math.random() * array_length; - return Math.floor(result); -}; +function generatePassword(length) { + const lowercaseChars = "abcdefghijklmnopqrstuvwxyz"; + const uppercaseChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + const numberChars = "0123456789"; + const specialChars = "!@#$%^&*()_+~`|}{[]:;?><,./-="; -var autocomplete = function (noCenter) { - var string_result = ""; // Empty string - for (var i = 1; i <= 8; i++) { - string_result += array_for_rand_pass[array_rand(array_for_rand_pass)]; + let password = [ + getRandomChar(lowercaseChars), + getRandomChar(uppercaseChars), + getRandomChar(numberChars), + getRandomChar(specialChars) + ]; + + for (let i = 4; i < length; i++) { + password.push(getRandomChar(lowercaseChars)); } + password = password.sort(() => Math.random() - 0.5); + return password.slice(0, length).join(""); +} + +function getRandomChar(charSet) { + return charSet[Math.floor(Math.random() * charSet.length)]; +} + +var autocomplete = function (noCenter = false, passwordLength = 10) { + let string_result = generatePassword(passwordLength); var _popup_left = (Math.ceil(window.screen.availWidth / 2) - 150); var _popup_top = (Math.ceil(window.screen.availHeight / 2) - 50); @@ -491,7 +505,7 @@ var autocomplete = function (noCenter) { $(document).ready(function () { $("span#autocomplete").click(function () { - autocomplete(); + autocomplete(false, $(this).data('password-length')); }); var _X, _Y; diff --git a/styles/templates/admin/admin_mass_email.tpl b/styles/templates/admin/admin_mass_email.tpl index ecc623f21..8a5846241 100644 --- a/styles/templates/admin/admin_mass_email.tpl +++ b/styles/templates/admin/admin_mass_email.tpl @@ -16,8 +16,8 @@ diff --git a/styles/templates/admin/index.tpl b/styles/templates/admin/index.tpl index fd46b0f1a..3c8f30941 100644 --- a/styles/templates/admin/index.tpl +++ b/styles/templates/admin/index.tpl @@ -80,32 +80,10 @@ $('#sync_topics').html(data.sync_topics_html); $('#sync_user_posts').html(data.sync_user_posts_html); $('#unlock_cron').html(data.unlock_cron_html); - $('#restore_corrupt_files').html(data.restore_corrupt_files_html); }
    - - -
    -

    {L_INTEGRITY_CHECK_SUCCESS}

    -
    {integrity_check.INTEGRITY_CHECKED_FILES} {integrity_check.INTEGRITY_LAST_CHECK_TIME}
    -
    - -
    -

    {L_INTEGRITY_CHECK_FAIL}

    -
    {integrity_check.INTEGRITY_CHECKED_FILES} {integrity_check.INTEGRITY_LAST_CHECK_TIME}
    -
    - -
      -
    • {integrity_check.INTEGRITY_WRONG_FILES_LIST}
    • -
    -
    - {L_INTEGRITY_RESTORE_ON_NEXT_RUN} - -
    - -
    diff --git a/styles/templates/default/group.tpl b/styles/templates/default/group.tpl index 295c14f92..25a8305e9 100644 --- a/styles/templates/default/group.tpl +++ b/styles/templates/default/group.tpl @@ -228,7 +228,7 @@ -
     ' . $dbg['src'] . '  [' . sprintf('%.4f', $dbg['time']) . ' s]  ' . $dbg['info'] . ' ' . $dbg['src'] . '  [' . sprintf('%.3f', $dbg['time']) . ' s]  ' . $dbg['info'] . ' ' . "[$this->engine] $this->db_server.$this->selected_db" . ' :: Query #' . ($this->num_queries + 1) . ' 
    ' . $this->explain_hold . '
    {L_MASS_EMAIL_MESSAGE_TYPE}
    +
    @@ -253,7 +253,7 @@ - + diff --git a/styles/templates/default/group_edit.tpl b/styles/templates/default/group_edit.tpl index 3f984c15b..51bc806c7 100644 --- a/styles/templates/default/group_edit.tpl +++ b/styles/templates/default/group_edit.tpl @@ -106,7 +106,7 @@ {S_HIDDEN_FIELDS} - + diff --git a/styles/templates/default/usercp_register.tpl b/styles/templates/default/usercp_register.tpl index 8e0896c8a..2a0e3fba5 100644 --- a/styles/templates/default/usercp_register.tpl +++ b/styles/templates/default/usercp_register.tpl @@ -41,7 +41,7 @@
    {L_YOUR_NEW_PASSWORD}
    - +
    @@ -85,7 +85,7 @@ @@ -319,6 +319,22 @@ + + + + + + + + + + @@ -339,7 +355,7 @@
    {L_UPLOAD_AVATAR_FILE}: - + diff --git a/styles/templates/default/viewtopic.tpl b/styles/templates/default/viewtopic.tpl index d6a9eb2bc..c69be6cd1 100644 --- a/styles/templates/default/viewtopic.tpl +++ b/styles/templates/default/viewtopic.tpl @@ -16,7 +16,7 @@ - + - + @@ -157,7 +155,7 @@ ajax.callback.callseed = function (data) { - + @@ -175,7 +173,7 @@ ajax.callback.callseed = function (data) { - +
    #{pending.PM} {pending.EMAIL} {pending.FROM}{pending.JOINED_RAW}{pending.JOINED}{pending.JOINED_RAW}{pending.JOINED} {pending.POSTS} {pending.WWW}
    {L_NEW_PASSWORD}: *
    {L_PASSWORD_IF_CHANGED}
    {L_PASSWORD}: *
    -   {PASSWORD_LONG} +   {PASSWORD_LONG}
    {L_HIDE_PEER_TORRENT_CLIENT}: +    + +
    {L_HIDE_PEER_COUNTRY_NAME}: +    + +
    {L_AVATAR_PANEL}
    diff --git a/styles/templates/default/usercp_viewprofile.tpl b/styles/templates/default/usercp_viewprofile.tpl index 558045f9b..d4a11e354 100644 --- a/styles/templates/default/usercp_viewprofile.tpl +++ b/styles/templates/default/usercp_viewprofile.tpl @@ -225,7 +225,7 @@ ajax.callback.group_membership = function(data) { $('#rank-sel').bind('change', function(){ ajax.change_user_rank( {PROFILE_USER_ID}, $(this).val() ); });
    - + {RANK_IMAGE}

    @@ -382,7 +382,7 @@ ajax.callback.group_membership = function(data) { [ {L_SEARCH_USER_POSTS} ] [ {L_SEARCH_USER_TOPICS} ] [ {L_SEARCH_RELEASES} ] - [ {L_WATCHED_TOPICS} ] + [ {L_WATCHED_TOPICS} ] [ {FEED_IMG} ]

    - {L_DL_LIST_AND_TORRENT_ACTIVITY} - {L_DL_LIST_AND_TORRENT_ACTIVITY}
    {L_DL_PORT} {L_DL_CLIENT}{L_COUNTRY}{L_COUNTRY}
    {sfull.srow.port.PORT} {sfull.srow.PEER_ID}{sfull.srow.COUNTRY}{sfull.srow.COUNTRY}
    @@ -210,7 +208,7 @@ ajax.callback.callseed = function (data) { {L_DL_PORT} {L_DL_CLIENT} - {L_COUNTRY} + {L_COUNTRY} @@ -228,7 +226,7 @@ ajax.callback.callseed = function (data) { {lfull.lrow.port.PORT} {lfull.lrow.PEER_ID} - {lfull.lrow.COUNTRY} + {lfull.lrow.COUNTRY} diff --git a/tracker.php b/tracker.php index 5f3c50d57..2e94615b9 100644 --- a/tracker.php +++ b/tracker.php @@ -713,10 +713,10 @@ if ($allowed_forums) { $s_last = $tor['seeder_last_seen']; $att_id = $tor['attach_id']; $size = $tor['size']; - $tor_magnet = create_magnet($tor['info_hash'], $tor['info_hash_v2'], \TorrentPier\Legacy\Torrent::getPasskey($user_id), html_ent_decode($tor['topic_title'])); + $tor_magnet = create_magnet($tor['info_hash'], $tor['info_hash_v2'], \TorrentPier\Legacy\Torrent::getPasskey($user_id), html_ent_decode($tor['topic_title']), $size); $compl = $tor['complete_count']; - $dl_sp = $dl ? humn_size($dl, 0, 'KB') . '/s' : '0 KB/s'; - $ul_sp = $ul ? humn_size($ul, 0, 'KB') . '/s' : '0 KB/s'; + $dl_sp = $dl ? humn_size($dl, min: 'KB') . '/s' : '0 KB/s'; + $ul_sp = $ul ? humn_size($ul, min: 'KB') . '/s' : '0 KB/s'; $dl_class = isset($tor['dl_status']) ? $dl_link_css[$tor['dl_status']] : 'genmed'; $row_class = !($row_num & 1) ? $row_class_1 : $row_class_2; diff --git a/viewforum.php b/viewforum.php index fa281dfcd..a8e17b581 100644 --- a/viewforum.php +++ b/viewforum.php @@ -468,7 +468,7 @@ foreach ($topic_rowset as $topic) { ]); if (isset($topic['tor_size'])) { - $tor_magnet = create_magnet($topic['info_hash'], $topic['info_hash_v2'], $topic['auth_key'], html_ent_decode($topic['topic_title'])); + $tor_magnet = create_magnet($topic['info_hash'], $topic['info_hash_v2'], $topic['auth_key'], html_ent_decode($topic['topic_title']), $topic['tor_size']); $template->assign_block_vars('t.tor', [ 'SEEDERS' => (int)$topic['seeders'],